有条件地修改全局变量

rob*_*bev 5 python

我想做这样的事情,但我得到一个SyntaxWarning并且它没有按预期工作

RAWR = "hi"
def test(bool):
    if bool:
        RAWR = "hello"   # make RAWR a new variable, don't reference global in this function
    else:
        global RAWR
        RAWR = "rawr"    # reference global variable in this function
    print RAWR           # if bool, use local, else use global (and modify global)
Run Code Online (Sandbox Code Playgroud)

我如何让它工作?传入True或False会修改全局变量.

小智 5

你不能.在范围内,特定名称指的是局部变量,或指非局部(例如全局或外部函数)变量.不是都.该global RAWR行为RAWR整个范围创建了一个全局(这就是为什么你得到一个警告,它没有按照你的想法做到这一点),就像赋值给变量使它成为整个范围的本地一样.编辑:感谢veredesmarald,我们现在知道它实际上是Python 2中的语法错误.这一半答案仅适用于Python 3.

您应该只使用不同名称的局部变量,并在要将其"提升"为全局的分支中,设置全局变量局部变量.(或者根本不使用全局变量.)