我刚读了一篇文章:The 10 Most Common Mistakes That Python Developers Make .问题 #1 仍然让我很困惑。我将用下面的代码描述我的问题。
>>>def foo(bar=[]):
... bar.append("baz")
... return bar
>>> foo()
["baz"]
>>> foo()
["baz", "baz"]
它不起作用,文章中的答案说列表是一个多类型并且默认值在调用过程中发生变化。但是当我尝试这个时
def foo(bar=[]):
if bar == []:bar=[]
...
它有效,那么有什么不同呢?
最佳答案
默认参数是在 Python 的函数定义中创建的。这意味着当您提供一个列表作为默认参数时,该列表将持续存在于所有未显式传递该参数的函数调用中。在第二个示例中,您将参数重新分配给不同的值。这会创建一个新列表并将解决问题。此“错误”/“功能”的更常见解决方案是为默认参数分配 None
值,然后在函数顶部检查它。这看起来像这样:
def foo(bar=None):
if bar is None:
bar = []
但是,您在第二个示例中编写的代码实现了相同的效果。
关于python - 默认参数在 python 中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37233771/