以下は、3 つの Python コードです。
======= No.1 =======
def foo(x, items=[]):
items.append(x)
return items
foo(1) #return [1]
foo(2) #return [1,2]
foo(3) #return [1,2,3]
====== No.2 ========
def foo(x, items=None):
if items is None:
items = []
items.append(x)
return items
foo(1) #return [1]
foo(2) #return [2]
foo(3) #return [3]
====== No.3 =======
def foo(x, items=[]):
items.append(x)
return items
foo(1) # returns [1]
foo(2,[]) # returns [2]
foo(3) # returns [1,3]
コード No.1 については、 の値がitems
ありませんので、デフォルト値の [] を常にとるべきだと思います。ただし、パラメーターitems
は静的変数のように動作し、後で使用するためにその値を保持します。No.2 のコードは、予想どおりに実行されます。foo が呼び出されるたびitems
に、デフォルト値が取得されますNone
。コード No.3 については、まったくわかりません。上記の 3 つのコードの実行方法が異なるのはなぜですか? 説明できますか?ありがとうございました。
PS: 私は python 3.3.1 を使用しています