我试图编写一个带有可选参数 tr 的python函数,如果未指定此参数,那么我想改用全局变量。
DEF_tARGET = "UserA"
def display_target(tr=DEF_TARGET):
print(tr)
问题是,当我在程序中的某个地方更改了全局变量,然后在不使用 tr 参数的情况下调用函数时,该函数仍采用初始值(声明该函数时)全局变量。请参见下面的示例:
DEF_TARGET = "UserA"
def display_target(tr=DEF_TARGET):
print(f"target is {tr}")
display_target("UserB") # prints UserB
DEF_TARGET = "UserB"
display_target()
输出
target is UserA
期望
target is UserB
我可以将函数声明如下,但我一直在寻找更好的方法
def display_target(tr=None):
if not tr:
tr = DEF_TARGET
print(f"target is {tr}")
答案 0 :(得分:1)
定义函数时python中的行为如下:
对于默认参数,它们存储在属性__defaults__
或__kwdefaults__
中。对于字符串,char,int或float这样的基本类型,它们将被复制到该位置。
因此,肯定的回答是“否”。您不能在此处强制python为您创建参考。但是,如果您只是想让代码更漂亮,那是可能的:
def display_target(tr=None):
tr = tr or DEF_TARGET
print(f"target is {tr}")