有沒有想過定義一個很短的回調(diào)函數(shù),但又不想用 def 的形式去寫一個那么長的函數(shù),那么有沒有快捷方式呢?答案是有的。
python 使用 lambda 來創(chuàng)建匿名函數(shù),也就是不再使用 def 語句這樣標(biāo)準(zhǔn)的形式定義一個函數(shù)。
匿名函數(shù)主要有以下特點:
基本語法
lambda [arg1 [,arg2,.....argn]]:expression
示例:
# -*- coding: UTF-8 -*-
sum = lambda num1 , num2 : num1 + num2;
print( sum( 1 , 2 ) )
輸出的結(jié)果:
3
注意:盡管 lambda 表達(dá)式允許你定義簡單函數(shù),但是它的使用是有限制的。 你只能指定單個表達(dá)式,它的值就是最后的返回值。也就是說不能包含其他的語言特性了, 包括多個語句、條件表達(dá)式、迭代以及異常處理等等。
匿名函數(shù)中,有一個特別需要注意的問題,比如,把上面的例子改一下:
# -*- coding: UTF-8 -*-
num2 = 100
sum1 = lambda num1 : num1 + num2 ;
num2 = 10000
sum2 = lambda num1 : num1 + num2 ;
print( sum1( 1 ) )
print( sum2( 1 ) )
你會認(rèn)為輸出什么呢?第一個輸出是 101,第二個是 10001,結(jié)果不是的,輸出的結(jié)果是這樣:
10001
10001
這主要在于 lambda 表達(dá)式中的 num2 是一個自由變量,在運行時綁定值,而不是定義時就綁定,這跟函數(shù)的默認(rèn)值參數(shù)定義是不同的。所以建議還是遇到這種情況還是使用第一種解法。