私はPythonの初心者で、「Pythonチュートリアル」を読んでいます。関数があるかどうかは次のとおりです。
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
これは印刷されます
[1]
[1, 2]
[1, 2, 3]
デフォルト値は 1 回だけ評価され、list は変更可能なオブジェクトであるためです。私はそれを理解することができます。
後続の呼び出し間でデフォルトを共有したくない場合は、次のことができます。
def f(a, L=None):
if L is None: #line 2
L = []
L.append(a)
return L
print f(1)
print f(2)
print f(3)
これは次のように出力されます。
[1]
[2]
[3]
しかし、なぜですか?これを説明する方法。デフォルト値は評価のみであることがわかってonce
おり、f(2) を呼び出すと、L は None ではなく、(2if
行目で) true にならないため、L.append(a) == [1, 2] になります。なんらかの理由でデフォルト値が再度評価されると推測できますが、「何らかの理由」とは何か、Pythonインタープリターが見るからですif L is None: L = []