如果在函数之前声明一个全局变量并尝试在函数中更改这些变量,则会抛出错误:
james = 100
def runthis():
james += 5
这不会奏效。
除非你在函数中再次声明全局变量,否则:
james = 100
def runthis():
global james
james += 5
是否有更简单的方法来更改函数内部的变量?它一次又一次地重新声明变量,这是一种混乱而烦人的事情。
答案 0 :(得分:3)
避免在函数中使用全局变量不是更简单吗?
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}
答案 1 :(得分:2)
修改全局变量在Python中很难看。如果您需要维护状态,请使用class:
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
它可能并不简单,但它肯定更加pythonic。