如果在函数之前声明一个全局变量并尝试在函数中更改该变量,则会抛出错误:
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
它可能并不简单,但它绝对更蟒蛇。