Python函數(shù)的常見問題

2018-10-10 13:56 更新

python的函數(shù)調用開銷有那些?

一般函數(shù)調用都涉及到 返回棧的壓棧 參數(shù)的壓?;蛘叻湃爰拇嫫?函數(shù)返回時恢復相應的寄存器和棧

什么是python的偏函數(shù)?


簡而言之,是一種對函數(shù)的公共部分的“美化”。


如何查看Python內建函數(shù)的實現(xiàn)代碼?


三種方法可以查看內建模塊的代碼,以random模塊為例:

  1. 使用help(random),如下圖:

  2. 利用random.__file__查看位置,然后打開后綴名為.py的文件。

  3. 命令行輸入python -v,然后倒入模塊時,會自動顯示位置。

注:從圖中可以看到file后邊有random模塊的存儲位置,去該文件夾打開random.py文件,注意,后綴名為.pyc的文件是編譯后的文件,打開是看不懂的。


找到random模塊位置 C:\Anaconda\lib\random.py,然后編輯器打開,可以查看相關方法的定義了:



Python中什么情況下應該使用匿名函數(shù)lambda


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ù)中。




以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號