這包含在Python教程中,但我仍然不完全理解Python具有這種風格的原因。是純粹的約定,還是有一些解釋爲什麼Python有以下默認參數的風格:瞭解Python風格,函數的默認參數
我的理解是,Python更喜歡something=None
而不是something=[]
作爲函數的默認參數。但是...爲什麼不使用something=[]
?當然,這是慣例在其他語言,如C
作爲一個例子,取這兩個例子,它們是等效
def function(arr, L=[]):
L.append(arr)
return L
和
def function(arr, L=None):
if L is None:
L = []
L.append(arr)
return L
我的理解是,首先是「不正確的風格「。爲什麼?
編輯:啊,我終於明白了。我在上面是不正確的:這兩個函數是不等價的。當函數被定義時,默認參數會被計算一次,而不是每次函數被調用!
請參閱http://docs.python-guide.org/en/latest/writing/gotchas/ –
它們*可能*在每次調用該函數時都會運行一段代碼(如lambda)並創建一個*新的*空列表。但是,這將會不必要地降低性能,並且2.使記憶/緩存樣式代碼難以寫入。老實說,Python以它的方式處理默認參數是一件幸事。 – Shashank
在這裏回答http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument –