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 默认参数混淆的主要内容,如果未能解决你的问题,请参考以下文章

Python函数中常见的参数类型应用及误区

Python 技术篇 - 通过pyminifier库实现源码压缩混淆加密保护实例演示,pyminifier的使用方法

python函数参数类型:位置参数默认参数动态参数

Python 默认参数值

在python函数中默认参数的一些坑

Python获取函数参数个数和默认参数