一般函數(shù)調用都涉及到 返回棧的壓棧 參數(shù)的壓?;蛘叻湃爰拇嫫?函數(shù)返回時恢復相應的寄存器和棧
簡而言之,是一種對函數(shù)的公共部分的“美化”。
三種方法可以查看內建模塊的代碼,以random
模塊為例:
使用help(random)
,如下圖:
利用random.__file__
查看位置,然后打開后綴名為.py
的文件。
命令行輸入python -v
,然后倒入模塊時,會自動顯示位置。
注:從圖中可以看到file
后邊有random
模塊的存儲位置,去該文件夾打開random.py
文件,注意,后綴名為.pyc
的文件是編譯后的文件,打開是看不懂的。
找到random
模塊位置 C:\Anaconda\lib\random.py
,然后編輯器打開,可以查看相關方法的定義了:
lambda函數(shù)一般是在函數(shù)式編程中使用的。通常學習的C/C++/Java等等都是過程式編程,所以不常接觸lambda函數(shù)。
其實這貨在C++中已經(jīng)有所運用了,如果對stl的迭代器比較熟悉的話,就會知道里頭的foreach等函數(shù),需要給一個函數(shù),這對于C/C++這種古老的語言來說比較痛苦,一般是在主函數(shù)外再寫一個函數(shù),然后傳入函數(shù)指針,看起來非常不直觀。boosts用一些特殊的語法技巧實現(xiàn)了C++的lambda。
舉個栗子,對于這樣一個list L,求L中大于3的元素集合
L = [1, 2, 3, 4, 5]
對于過程式編程,通常會這么寫
L3 = []
for i in L:
if i > 3:
L3.append(i)
而對于函數(shù)式變成,只需要給filter函數(shù)一個判斷函數(shù)就行了
def greater_than_3(x):
return x > 3
L3 = filter(greater_than_3, L)
由于這個判斷函數(shù)非常簡單,用def寫起來太累贅了,所以用lambda來實現(xiàn)就非常簡潔、易懂
L3 = filter(lambda x: x > 3, L)
這是個很簡單的例子,可以看出lambda的好處。lambda函數(shù)更常用在map和reduce兩個函數(shù)中。
更多建議: