python - 默认参数在 python 中是如何工作的

标签 python

我刚读了一篇文章: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/

相关文章:

python - Django - 注释按日期分组的不同值的 Count()

python - 如何检查表是否存在?

python - 获取文本文件中列出的所有文件的时间戳

python - 从 numpy.where() 获取值的位置作为单个值并将其附加到另一个数组

c# - 表示数字序列的算法

python - 对不同目录中的文件使用 exec 会导致模块导入错误

python - 为 Python 中的方法生成控制流图的最简单方法是什么?

python - 使用 Geopandas 将 NYC shapefile 子集到曼哈顿

python - 我在为 python 安装 pdftotext 时遇到困难

python - 架构 - 能够在 Django 中更改电子邮件地址(主要用户 ID)