有没有更简单的方法来更改和使用全局变量?

Is there a more simple way to change and use global variables?

如果您在函数之前声明一个全局变量并尝试在函数中更改该变量,则会返回错误:

james = 100

def runthis():
    james += 5

这行不通。

除非你在函数中再次声明全局变量,像这样:

james = 100

def runthis():
    global james
    james += 5

有没有更简单的方法来改变函数内部的变量?一次又一次地重新声明变量有点混乱和烦人。

避免在函数中使用全局变量不是更简单吗?

james = 100

def runthis(value):
    return value + 5

james = runthis(james)

如果你有很多它们,将它们放在一个可变容器中可能更有意义,例如字典:

def runthis(scores):
    scores['james'] += 5

players = {'james': 100, 'sue': 42}

runthis(players)
print players  # -> {'james': 105, 'sue': 42}

如果您不喜欢 scores['james'] 表示法,您可以创建一个专门的 dict class:

# from 
class AttrDict(dict):
    def __init__(self, *args, **kwargs):
        super(AttrDict, self).__init__(*args, **kwargs)
        self.__dict__ = self

def runthis(scores):
    scores.james += 5  # note use of dot + attribute name

players = AttrDict({'james': 100, 'sue': 42})

runthis(players)
print players  # -> {'james': 105, 'sue': 42}

修改全局变量在 Python 中很丑陋。如果您需要维护状态,请使用 class:

class MyClass(object):
    def __init__(self):
        self.james = 100
    def runThis(self):
        self.james += 5

或者,如果您需要 james 在所有实例之间共享,请将其设置为 class 属性:

class MyClass(object):
    james = 100
    def runThis(self):
        MyClass.james += 5

它可能不简单,但绝对更pythonic。