2010-01-05 42 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__和其他較小的內省細節)。