在Python中,在运行时更改全局变量后,是否可以在函数中传递该变量?
我怀疑我遇到了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
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版本是什么?