下面是在user-defined函數中使用lambda函數的示例:
def sample_func(a): #1
return lambda a:a*a
當它被調用時,
s=sample_func(2) #2
print(s)
輸出似乎是一個函數地址,如<function sample_func.<locals>.<lambda> at 0000xx
在上面賦值給變量s
之后
s(5) #3
returns 25.
對pythonlambda來說是新來的,正確的解釋方法是什么,解釋器如何處理#2中的參數,以及為什么#2中沒有返回4,謝謝你的幫助!
所以這里有點詭計,因為變量
a
被多次使用。但首先,在#2中要做的是調用
some_func
,它返回一個函數對象。lambda是一個函數對象,在本例中,您將其賦值給s
。在#3中,調用該函數并傳入值5。此時s
基本上等于:讓我們仔細看看這個函數:
調用
sample_func()
時,它返回一個函數對象。此返回函數接受參數a
,并返回a*a
。所以現在發生的是傳遞到sample_func()
的參數a
基本上從未使用過。如果您想知道為什么,那么它與作用域在Python中的工作方式有關。以下代碼是一個更容易理解的示例:在上面的代碼中,第5行的
foo
變量引用了傳入inner_function()
的foo
參數,它沒有引用outer_function
的foo
參數。你可以把inner_function()
當作你的lambda。希望一切都有意義!