目錄
- lambda函數(shù)讓代碼看起來更簡潔直觀
- lambda函數(shù)是一個函數(shù)對象
- 總結
1.lambda函數(shù)讓代碼看起來更簡潔直觀
lambda函數(shù)又稱匿名函數(shù),有些情況下我們不用顯式定義而采用匿名函數(shù)會讓代碼看上去更加簡潔。
In [48]: ls = [1,2,3]
In [49]: print(list(map(lambda x:x*x, ls)))
[1, 4, 9]
上面的例子中,通過lambda函數(shù)使得我們可以在不顯式定義函數(shù)的情況下為map傳遞了一個函數(shù),這使得代碼看上去更為簡潔直觀。
關鍵詞lambda定義了一個匿名函數(shù),冒號前面的是匿名函數(shù)的參數(shù)(當需要多個參數(shù)時,參數(shù)之間用逗號,分割),冒號后的是一個表達式,lambda函數(shù)的返回內(nèi)容就是表達式的值。
2.lambda函數(shù)是一個函數(shù)對象
lambda函數(shù)也是一個函數(shù)對象,所以也可以賦值給一個變量。
In [50]: lambda x,y:x*x+y*y
Out[50]: <function __main__.<lambda>>
In [51]: f1 = lambda x,y:x*x+y*y
In [52]: f1(1,2)
Out[52]: 5
lambda函數(shù)也作為返回值返回。
In [53]: def f():
...: x = 1
...: return lambda y:x*x+y*y # lambda函數(shù)引用了本地變量x,并且在函數(shù)f結束后保存了x的狀態(tài)
...:
In [54]: m = f()
In [55]: m(2)
Out[55]: 5
In [56]: m.__closure__ # 證明m是一個閉包
Out[56]: (<cell at 0x00000132044E9E28: int object at 0x0000000051F260C0>,)
3.總結
- 有時我們需要在程序的某處使用一次某個函數(shù),在這時使用lambda函數(shù)更加的方便也便于理解。
- python對lambda函數(shù)限制很多,其中很重要的一個就是只允許lambda函數(shù)包含一條表達式。這是為了避免濫用lambda函數(shù)——畢竟大量的抽象帶來簡潔的同時也帶來了理解的困難。