我正在尝试编写一个带有可选参数的python函数tr,如果未指定该参数,那么我想采用一个全局变量。
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}")
Python 中定义函数时的行为如下:
对于默认参数,它们存储在属性
__defaults__
或 __kwdefaults__
中。对于字符串、字符、整数或浮点等基本类型,它们将被复制到此位置。
所以最终的答案是否定的。您不能强制 python 在这里为您创建引用。但如果你只是想让你的代码更漂亮,这是可能的:
def display_target(tr=None):
tr = tr or DEF_TARGET
print(f"target is {tr}")