ExpertiDict

Python · Intermediário · Inglês · Técnico

late binding

/ˈleɪt ˈbaɪndɪŋ/substantivo

Em closures e lambdas, o valor de uma variável externa é lido só quando a função roda, não quando é definida. Em laços, todas acabam vendo o último valor.

Onde usar

Armadilha clássica de code review: lambdas criadas num for retornam todas o mesmo número. A correção usual é um argumento padrão, como lambda i=i: i, ou functools.partial.

Em código

fs = [lambda: i for i in range(3)]
print([f() for f in fs])  # [2, 2, 2]
ok = [lambda i=i: i for i in range(3)]
print([f() for f in ok])  # [0, 1, 2]

Exemplos

All my lambdas return the same value, it's late binding.

Todas as minhas lambdas retornam o mesmo valor, é late binding.

Fix the late binding with a default argument.

Corrija o late binding com um argumento padrão.

Cuidado

Não é bug do interpretador: é o comportamento definido, pois a função guarda a variável, não o valor.

Sinônimos

ligação tardia

Antônimos

early binding

Veja também

Todos os termos de Python