有没有更简单的方法来更改和使用全局变量?
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。
如果您在函数之前声明一个全局变量并尝试在函数中更改该变量,则会返回错误:
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。