繁体   English   中英

我对Python3.6中默认参数值的困惑

[英]My confusion about default argument values in Python3.6

这是python3.6标准下的两段代码。 它们是python3.6(tutorial,page25)文档中的示例。 第一个是:

def f(a, L=[]):
    L.append(a)
    return L
print(f(1))
print(f(2))
print(f(3))

结果:

[1]
[1, 2]
[1, 2, 3]

第二:

def f(a, L = None):
    if L is None:
        L = []
    L.append(a)
    return L
print(f(1))
print(f(2))
print(f(3))

结果:

[1]
[2]
[3]

因此,在第二段代码中,我感到困惑的是,在执行print(f(1))之后, print(f(2))会将a = 2L=[1]传递给f() ,但是为什么f()没有得到L=[1]吗? 如果第二段代码中的L = None则每次调用f()时都将L定义为None ,但是为什么第一段代码中的L = []却没有将L定义为[]

这两个示例显示了默认参数在后台的工作方式:第一个演示了默认参数在函数定义内部的“实时”运行。 含义:只有在用def节覆盖整个函数时,才会重置第一个函数中的L值。

对于第二个实现BUT,情况也是如此,因为它为None:必须在执行函数主体时对其进行初始化。 每次调用该函数都会产生一个新列表。

这种行为可能会造成混乱,并导致奇怪的结果,这就是为什么我从大多数消息来源得知,最好避免使用第一个选项并使用None default args。

希望我能把事情弄清楚。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM