全局变量作为Python函数中的默认参数

问题描述 投票:0回答:1

我正在尝试编写一个带有可选参数的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 global-variables default-arguments
1个回答
2
投票

Python 中定义函数时的行为如下:

  • 创建函数对象
  • 编译代码并将其存储在对象中
  • 确保当您想要启动该函数时,运行代码所需的所有内容(例如变量)都可用

对于默认参数,它们存储在属性

__defaults__
__kwdefaults__
中。对于字符串、字符、整数或浮点等基本类型,它们将被复制到此位置。

所以最终的答案是否定的。您不能强制 python 在这里为您创建引用。但如果你只是想让你的代码更漂亮,这是可能的:

def display_target(tr=None):
    tr = tr or DEF_TARGET
    print(f"target is {tr}")
© www.soinside.com 2019 - 2024. All rights reserved.