【发布时间】:2021-03-15 09:54:06
【问题描述】:
我有一个类似这个示例代码的代码:
default_var = "abc"
def set_default_var():
global default_var
default_var = "something different"
def ex_func(var1="", var2="", var3=default_var):
print(var3)
set_default_var()
ex_func()
>>>abc
当我在参数列表中将 var3 设置为 default_var 时,我希望它具有值 "something different",当我调用函数而不指定 var3 。但是,打印显示我 “abc”。 即使在调试期间,调试器也会显示 default_var 设置为 "something different",但 var3 不是。这是一个错误,还是一个非常意外的功能?
谢谢!
【问题讨论】:
-
此行为发生在 python 3.8.5 上用于复制目的
-
函数的默认值在定义时评估:stackoverflow.com/q/1651154/2237151
-
var3的默认值是标识符default_var在评估时引用的任何值。你可以看到它是__defaults__是('', '', 'abc'),而不是('', '', default_var)。 -
谢谢。我觉得很奇怪,在运行时没有评估该值,但也许它是一个性能问题。在调用函数时对函数的所有类型的参数执行此操作会大大降低性能。
标签: python python-3.x function