def get_math_func(type) :
# 定義三個局部函數(shù)
...
# 返回局部函數(shù)
if type == "square" :
return square
if type == "cube" :
return cube
else:
return factorial
def get_math_func(type) :
result=1
# 該函數(shù)返回的是Lambda表達(dá)式
if type == 'square':
return lambda n: n * n # ①
elif type == 'cube':
return lambda n: n * n * n # ②
else:
return lambda n: (1 + n) * n / 2 # ③
# 調(diào)用get_math_func(),程序返回一個嵌套函數(shù)
math_func = get_math_func("cube")
print(math_func(5)) # 輸出125
math_func = get_math_func("square")
print(math_func(5)) # 輸出25
math_func = get_math_func("other")
print(math_func(5)) # 輸出15.0
注意:由于 lambda 表達(dá)式只能是單行表達(dá)式,不允許使用更復(fù)雜的函數(shù)形式,因此上面 ③ 號代碼處改為計(jì)算 1+2+3+…+n 的總和。
lambda [parameter_list] : 表達(dá)式
從上面的語法格式可以看出 lambda 表達(dá)式的幾個要點(diǎn):lambda 表達(dá)式必須使用 lambda 關(guān)鍵字定義。
在 lambda 關(guān)鍵字之后、冒號左邊的是參數(shù)列表,可以沒有參數(shù),也可以有多個參數(shù)。如果有多個參數(shù),則需要用逗號隔開,冒號右邊是該 lambda 表達(dá)式的返回值。
lambda x , y:x + y
可改寫為如下函數(shù)形式:def add(x, y):
return x+ y
對于單行函數(shù),使用 lambda 表達(dá)式可以省去定義函數(shù)的過程,讓代碼更加簡潔。
對于不需要多次復(fù)用的函數(shù),使用 lambda 表達(dá)式可以在用完之后立即釋放,提高了性能。
# 傳入計(jì)算平方的lambda表達(dá)式作為參數(shù)
x = map(lambda x: x*x , range(8))
print([e for e in x]) # [0, 1, 4, 9, 16, 25, 36, 49]
# 傳入計(jì)算平方的lambda表達(dá)式作為參數(shù)
y = map(lambda x: x*x if x % 2 == 0 else 0, range(8))
print([e for e in y]) # [0, 0, 4, 0, 16, 0, 36, 0]