對於學習python的人都有這樣的困惑 def foo(a=[]): a.append(5) return a Python新手希望這個函數總是返回一個只包含一個元素的列表:[5]。結果卻非常不同,而且非常驚人(對於新手來說): >>> foo() [5] >>> foo() [5, 5] >>> ...
對於學習python的人都有這樣的困惑
def foo(a=[]): a.append(5) return a
Python新手希望這個函數總是返回一個只包含一個元素的列表:[5]。結果卻非常不同,而且非常驚人(對於新手來說):
>>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5] >>> foo()
實際上,這不是設計缺陷,並不是因為內部或性能。
它只是因為Python中的函數是第一類對象,而不僅僅是一段代碼。
一旦你以這種方式思考,那麼它就完全有意義了:一個函數是一個被定義的對象; 預設參數是一種“成員數據”,因此它們的狀態可能會從一個調用更改為另一個調用 - 與任何其他對象完全相同。
所屬網站分類: python基礎 > 函數
作者:goodbody
鏈接:http://www.pythonheidong.com/blog/article/65/
來源:python黑洞網