擅长:python、mysql、java
<p>不要使用<code>[]</code>作为默认值!在</p>
<pre><code>>>> def bad(default=[]):
... default.append(1)
... print default
...
>>> bad()
[1]
>>> bad()
[1, 1]
>>> bad()
[1, 1, 1]
>>> def good(default=None):
... if default is None:
... default = []
... default.append(1)
... print default
...
>>> good()
[1]
>>> good()
[1]
</code></pre>
<p>默认参数是在函数被<em>定义</em>时创建的,而不是在<em>调用</em>时创建的。
所以只对默认值使用不可变类型。使用整数、字符串、元组是可以的,但是如果您想要一个默认的列表或字典或任何可变的东西,那么就使用<code>None</code>并执行上面的技巧。在</p>
<p>阅读<a href="https://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument">this</a>问题和答案,以便更好地理解这件事。在</p>