重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数
次のコードは問題を示しています。
def fn(param, named_param={}, another_named_param=1):
named_param[param] = str(another_named_param)
another_named_param += param
return named_param
for i in range(0, 2):
result = {}
result = fn(i)
print result
print
for i in range(0, 2):
result = fn(i, named_param={})
print result
print
result = fn(0)
print result
result = fn(1)
print result
出力:
{0: '1'}
{0: '1', 1: '1'}
{0: '1'}
{1: '1'}
{0: '1', 1: '1'}
{0: '1', 1: '1'}
forループの値と一致するparamを使用した1番目、2番目のループ、および後続の2つの単一呼び出しの出力は、同じテキスト出力になると予想しましたが、明示的にデフォルトで空の辞書に設定されていない場合はfn
、の値を保持します。named_param
ドキュメントで機能が定義されていますか?