0

Pythonインタープリターを開き、コード化して次の関数を実行しました。

>>> def crazy_function(my_list=[]):
...     my_list.append(0)
...     return my_list
... 
>>> crazy_function()
[0]
>>> crazy_function()
[0, 0]
>>> crazy_function()
[0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0, 0, 0]
>>> crazy_function()
[0, 0, 0, 0, 0, 0, 0]
>>> 

何が起こっている?関数を呼び出すほど、関数によって返されるリストが長くなるのはなぜですか?関数が呼び出されるたびに新しいローカルリストを作成するべきではありませんか?

4

1 に答える 1

2

可変オブジェクトを関数の引数のデフォルト値に割り当てることは一般的なエラーです。ドキュメントの引用:

デフォルトのパラメータ値は、関数定義の実行時に評価されます。これは、関数が定義されたときに式が1回評価され、同じ「事前計算された」値が各呼び出しに使用されることを意味します。これは、デフォルトパラメータがリストやディクショナリなどの可変オブジェクトである場合を理解するために特に重要です。関数がオブジェクトを変更する場合(たとえば、リストにアイテムを追加することによって)、デフォルト値は事実上変更されます。これは一般的に意図されたものではありません。

于 2013-02-11T02:11:50.827 に答える