在Python中,在运行时更改全局变量后,是否可以在函数中传递该变量?

在Python中,在运行时更改全局变量后,是否可以在函数中传递该变量?,python,global-variables,Python,Global Variables,我怀疑我遇到了Python的局限性,但我只想确保 GLOBAL_VAR = "foo" def printVar(myVar=GLOBAL_VAR): print myVar def changeVar(newVar): global GLOBAL_VAR GLOBAL_VAR = newVar printVar() OUTPUT: foo changeVar('bar') print GLOBAL_VAR OUTPUT: bar printVar() O

我怀疑我遇到了Python的局限性,但我只想确保

GLOBAL_VAR = "foo"

def printVar(myVar=GLOBAL_VAR):
    print myVar

def changeVar(newVar):
    global GLOBAL_VAR
    GLOBAL_VAR = newVar

printVar()

OUTPUT: foo

changeVar('bar')
print GLOBAL_VAR

OUTPUT: bar

printVar()

OUTPUT: foo    

为什么最后一个输出不是“条形”呢?

因为赋值
myVar=GLOBAL\u VAR
是在定义函数时计算的,而此时,
GLOBAL\u VAR
“foo”

您可以这样更改您的函数:

def printVar(myVar=None):
    if(myVar is None):
        myVar = GLOBAL_VAR
    print myVar 

这样,它将始终打印
GLOBAL\u VAR

的当前值,因为赋值
myVar=GLOBAL\u VAR
是在定义函数时计算的,而此时,
GLOBAL\u VAR
“foo”

您可以这样更改您的函数:

def printVar(myVar=None):
    if(myVar is None):
        myVar = GLOBAL_VAR
    print myVar 

这样,它将始终打印
GLOBAL\u VAR

的当前值。默认绑定在执行
def
语句时完成——简而言之,当您第一次解析该行时,在第一次通过程序时。然后该值为“foo”,因此这是
myVar
的默认值。您可以更改
GLOBAL\u VAR
,但该绑定仍然是对值的绑定,而不是对变量的引用


如果要更改绑定,需要再次执行
def
,换句话说,必须重新定义函数。

默认绑定是在执行
def
语句时完成的,简而言之,是在第一次通过程序时第一次解析该行时完成的。然后该值为“foo”,因此这是
myVar
的默认值。您可以更改
GLOBAL\u VAR
,但该绑定仍然是对值的绑定,而不是对变量的引用


如果要更改绑定,需要再次执行
def
——换句话说,必须重新定义函数。

如果OP要验证这一点,可以使用
inspect.getargspec(printVar)
查看我的猜测。谢谢你的确认!如果OP想要验证这一点,他们可以使用
inspect.getargspec(printVar)
查看我的猜测。谢谢你的确认!您在哪里定义了foo和bar(您正在尝试输出:它们)?否则,您的代码可以正常工作。这个程序的目的是什么?您使用的是什么版本的Python?您在哪里定义了foo和bar(您试图输出:它们)?否则,您的代码可以正常工作。这个程序的目的是什么?您使用的Python版本是什么?