Подтвердить что ты не робот

Что такое "привязка lambda" в Python?

Я понимаю, что такое лямбда-функции в Python, но я не могу найти, что означает "привязка lambda", путем поиска документов Python. Ссылка, чтобы прочитать об этом, была бы замечательной. Тривиальный объясненный пример будет еще лучше. Спасибо.

4b9b3361

Ответ 1

Во-первых, общее определение:

Когда инструкция программы или функции, текущие значения формальные параметры сохраняются (на стек) и в рамках утверждения, они связаны с значения фактических аргументов, сделанных в вызов. Когда выражение вышли, исходные значения этих формальные аргументы восстанавливаются. Эта протокол полностью рекурсивный. Если внутри тело заявления, что-то сделано, что приводит к формальным параметрам снова привязываться к новым значениям, схема лямбда-связывания гарантирует, что все это произойдет в упорядоченном образом.

Теперь есть отличный пример 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].... "

Ответ 2

Я никогда не слышал этого термина, но одним из объяснений может быть хакер по умолчанию, используемый для назначения значения непосредственно параметру лямбда. Использование примера Swati:

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

Ответ 3

Где вы видели используемую фразу?

"Связывание" в 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