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



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

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类:

# from http://stackoverflow.com/a/15109345/355230
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 MyClass(object):
    def __init__(self):
        self.james = 100
    def runThis(self):
        self.james += 5

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

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

它可能并不简单,但它绝对更蟒蛇。

相关内容

  • 没有找到相关文章

最新更新