0

次の Python コード:

def test_function(a = []):
    a.append('x')
    print(a)

test_function()
test_function()

プリント:

['x']
['x', 'x']

a=[]デフォルトの割り当ては一度だけ使用されるようです。その後a、関数が再度呼び出されたときに再割り当てされない限り、関数のプロパティとして扱われます (例test_function(a=['hello']))。動作は Python2.x と 3.x で共有されているため、設計上の欠陥として認識されていないと思います。

知りたい:

  1. この行動のメカニズムは何ですか?
  2. この行動の背後にある理論的根拠は何ですか? (私には紛らわしいようです)
4

1 に答える 1

1

デフォルト値は式で、関数が定義/コンパイルされた時点で一度だけ評価されます。おそらく関数オブジェクトのどこかに格納されているため、この式がリストのような可変オブジェクトに評価されると、説明した効果が得られます。この理由についてはわかりませんが、これは python の機能です。

In [11]: def f(x = [], y = 123):
    ...:     pass

In [12]: f.func_defaults
Out[12]: ([], 123)
于 2013-09-07T16:34:50.117 に答える