Pergunta

Eu entendo o que são funções lambda em Python, mas eu não consigo descobrir o que é o significado de "ligação lambda" pesquisando os documentos de Python. Um link para ler sobre isso seria ótimo. Um trivial explicou exemplo seria ainda melhor. Obrigado.

Foi útil?

Solução

Em primeiro lugar, uma definição geral:

Quando uma instrução programa ou função é executada, os valores atuais de parâmetros formais são salvas (na pilha) e dentro do âmbito da declaração, eles são obrigados a valores dos argumentos reais feitos em a chamada. Quando a instrução é saíram, os valores originais de aqueles argumentos formais são restauradas. este protocolo é completamente recursivo. Se dentro o corpo de uma declaração, algo é feito que faz com que os parâmetros formais estar vinculado novamente, para novos valores, o lambda de ligação garantias esquema que tudo isso vai acontecer de forma ordenada maneira.

Agora, há uma excelente exemplo python em uma discussão aqui :

" ... há apenas uma ligação para x: fazendo x = 7 apenas muda o valor no pré-existente de ligação é por isso

.
def foo(x): 
   a = lambda: x 
   x = 7 
   b = lambda: x 
   return a,b

retorna duas funções que tanto retorno 7; se houvesse uma nova ligação após a x = 7, as funções que retornam valores diferentes [supondo que você não chamar foo (7), é claro. assumindo também nested_scopes] .... "

Outras dicas

Eu nunca ouvi esse termo, mas uma explicação poderia ser o "parâmetro padrão" hack usado para atribuir um valor diretamente para o parâmetro de um lambda. Usando o exemplo de 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

Onde você viu a frase usada?

"Ligação" refere-se geralmente em Python se ao processo pelo qual um nome variável acaba que aponta para um objecto específico, seja por atribuição ou passagem de parâmetros ou alguns outros meios, por exemplo:.

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

Então, eu diria que "lambda de ligação" refere-se ao processo de ligação de uma função lambda para um nome de variável, ou talvez obrigatório seus parâmetros nomeados para objetos específicos? Há uma boa explicação de ligação na referência da linguagem, em http://docs.python.org /ref/naming.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top