[英]Is it necessary that default python should be python3.6 to download anaconda for 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 = 2
和L=[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.