





Где вы видели используемую фразу?
«Связывание» в Python обычно относится к процессу, в результате которого имя переменной заканчивается указанием на конкретный объект, будь то путем присваивания или передачи параметров или каким-либо другим способом, например:
a = dict(foo = "bar", zip = "zap", zig = "zag") # binds a to a newly-created dict object
b = a # binds b to that same dictionary
def crunch(param):
print param
crunch(a) # binds the parameter "param" in the function crunch to that same dict again
Итак, я бы предположил, что «привязка лямбда» относится к процессу привязки лямбда-функции к имени переменной или, возможно, привязки ее именованных параметров к конкретным объектам? В Справочнике по языку есть довольно хорошее объяснение привязки по адресу http://docs.python.org/ref/naming.html
Во-первых, общее определение:
When a program or function statement is executed, the current values of formal parameters are saved (on the stack) and within the scope of the statement, they are bound to the values of the actual arguments made in the call. When the statement is exited, the original values of those formal arguments are restored. This protocol is fully recursive. If within the body of a statement, something is done that causes the formal parameters to be bound again, to new values, the lambda-binding scheme guarantees that this will all happen in an orderly manner.
Теперь есть отличный пример python в обсуждении здесь:
"... для x существует только одна привязка: выполнение x = 7 просто изменяет значение в ранее существовавшей привязке. Вот почему
def foo(x):
a = lambda: x
x = 7
b = lambda: x
return a,b
возвращает две функции, обе возвращающие 7; если после x = 7 была новая привязка, функции возвращали бы другие значения [конечно, при условии, что вы не вызываете foo (7). Также предполагается nested_scopes] .... "
Я никогда не слышал этот термин, но одним из объяснений может быть взлом «параметра по умолчанию», используемый для присвоения значения непосредственно параметру лямбда. Используя пример Свати:
def foo(x):
a = lambda x=x: x
x = 7
b = lambda: x
return a,b
aa, bb = foo(4)
aa() # Prints 4
bb() # Prints 7