2010-01-05 40 views
3
def funct(): 
    x = 4 
    action = (lambda n: x ** n) 
    return action 

x = funct() 
print(x(2)) # prints 16 

...我不太明白为什么2会自动分配给n?嵌套的Scopes和Lambdas

+0

[初学者]和λ。考虑到lambda不适合初学者并跳过它们。别理他们。你不需要它们。 – 2010-01-05 11:26:03

回答

5

n是由funct返回的匿名函数的参数。 funct的确切等效定义为

def funct(): 
    x = 4 
    def action(n): 
     return x ** n 
    return action 

这种形式是否更有意义?

3

它没有被“自动”分配:它被非常明确地分配,并且 - 通过将它作为参数n对应的实际参数自动传递。设置x的复杂方式与def x(n): return 4**n几乎完全相同(扣除x.__name__和其他较小的内省细节)。