i = 5
def f(arg=i):
print(arg)
i = 6
f()我正在从官方文档中学习Python。在这里,我发现了上面的一段代码,我无法理解为什么打印5而不是6,我对Python还比较陌生。有人能帮我理解这个概念吗?
发布于 2021-01-18 18:26:10
i = 5
def f(arg=i)
print(arg)i是在定义时计算的,因此上面的代码与下面的代码具有相同的含义:
def f(arg=5)
print(arg)这意味着,当不带参数地调用函数时,arg将具有5值,不管i的值现在是什么。
为了得到您想要的,只需执行以下操作:
def f(arg)
print(arg)
i = 6
f(i)发布于 2021-01-18 18:25:47
因为函数在'i‘的第一个声明中取其默认值。
如果希望代码打印6,则更改为第一行的i=6。
希望我帮了你!
发布于 2021-01-18 18:55:15
这是引用处理的事物与按值处理的事物之间的区别。当您定义函数f时,您告诉它将参数的默认值设置为i --这是通过值完成的,而不是通过引用完成的,因此它获取了i当时的值,并将该函数的默认值设置为该值。在此之后更改i的值并不会改变arg的值。如果你想让它这样工作,你可以这样做:
i = 5
def f(arg = None):
if (arg = None)
arg = i
print(arg)
i = 6
f()这允许您将arg的值如常地传递到函数中,但如果不(或显式地传递None),它将arg更新为i的当前值,如果arg仍然是None (如果您熟悉其他语言,则arg的NULL版本)
使用or运算符arg = arg or i也可以执行类似的操作,但这将检查arg是否有错误,并且在使用整数时,像在示例中一样,0将被选中。
https://stackoverflow.com/questions/65780014
复制相似问题