2

以下は、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 を使用しています

4

3 に答える 3

1

ソースコード[]は値ではありません。リストに評価される式です。1 回評価すると、1 つのリストが得られます。複数回評価すると、複数のリストが得られます。理解しておくべき重要なことは、デフォルトの引数はデフォルトの式を一度だけ評価して保存するということです。したがって、デフォルトの引数がリストの場合、すべての呼び出しで常に同じリストになります。

于 2013-08-22T01:16:06.757 に答える