Python 默认参数混淆
Posted
技术标签:
【中文标题】Python 默认参数混淆【英文标题】:Python default arguments confusion 【发布时间】:2018-11-16 03:48:30 【问题描述】:由于我是 python 新手,我已经开始讨论默认参数的话题 根据定义,我理解默认参数只评估一次,并且在函数定义时,但是这个代码片段造成了混乱
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
在上面的代码中 L 是一个变量 修改为在第一个函数调用时列出 例如 f(1) 但即使是第二次调用函数时 L 也被修改为列出 例如.. f(1) f(2) [1] 中的结果 [2] 你能准确地解释一下上面的代码评估是如何完成的吗
【问题讨论】:
【参考方案1】:每次调用f
时不带第二个参数,都会创建一个新列表。如果要复用列表,需要存储f
的结果
new_list = f(1)
f(2, new_list)
print(new_list)
将输出[1,2]
【讨论】:
感谢@MikeScotty 发现这个错字。【参考方案2】:您可以阅读本文以更好地理解传递 https://www.python-course.eu/passing_arguments.php 的 python 参数
长话短说-您不能覆盖参数的值,您只能创建指向新列表的局部变量L
,这将隐藏参数L
。但是在下一次调用函数参数时L
仍然是None
,除非它会被传递
【讨论】:
以上是关于Python 默认参数混淆的主要内容,如果未能解决你的问题,请参考以下文章