python - 为什么将默认参数设置为空列表后,函数中的变量仍保留该值?
问题描述
def incr(s,a=[]):
for x in s:
a.append(x)
return a
print(incr('asmuel'))
print(incr('rainfi'))
输出:
['a', 's', 'm', 'u', 'e', 'l']
['a', 's', 'm', 'u', 'e', 'l', 'r', 'a', 'i', 'n', 'f', 'i']
为什么即使将默认参数设置为空列表后,此函数仍保留该值?每次调用函数时如何使用默认参数值即[]?
解决方案
您应该避免使用传递可变参数来运行。a
不是[]
每次调用函数时都初始化为一次。在下一个函数调用中重复使用相同的数组。因此数组只是不断扩展
这样做的正确方法是
def incr(s,a=None):
if a is None:
a=[]
for x in s:
a.append(x)
return a
这不仅适用于列表,也适用于任何可变数据结构。
推荐阅读
- cloud - 我们如何部署 Pharo seaside web 应用程序?
- asp.net-mvc - HomeController 中路由设置中路由上的 HTTP 404
- c# - WPF:为什么隐藏内容接受用户操作?
- servicestack - Servicestack 自动查询自定义约定不适用于 PostgreSQL
- python-3.x - 我自己的线性回归
- python - Django多个数据库取决于模型
- r - 为 gemo_polygon 数据添加图例到 ggmap
- amazon-web-services - 仅从 S3 复制到 Redshift 的特定文件没有清单文件过程
- regression - 负二项式回归:系数解释
- android - 在 zxing 应用程序中禁用反向图像扫描