Python - How to make a local variable (inside a function) global
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Using global variables in a function other than the one that created them
我在使用函数,这样我的程序就不会一团糟,但我不知道如何将局部变量变为全局变量。
以下是实现相同目标的两种方法:
使用参数和返回(推荐)
1 2 3 4 5 6 7 8 | def other_function(parameter): return parameter + 5 def main_function(): x = 10 print x x = other_function(x) print x |
当运行
1 2 | >>> 10 >>> 15 |
使用全局变量(不要这样做)
1 2 3 4 5 6 7 8 9 10 11 12 13 | x = 0 # The initial value of x, with global scope def other_function(): global x x = x + 5 def main_function(): print x # Just printing - no need to declare global yet global x # So we can change the global x x = 10 print x other_function() print x |
现在您将获得:
1 2 3 | >>> 0 # Initial global value >>> 10 # Now we've set it to 10 in `main_function()` >>> 15 # Now we've added 5 in `other_function()` |
只需在任何函数之外声明变量:
1 2 3 4 | globalValue = 1 def f(x): print(globalValue + x) |
如果需要从函数内部分配给全局,请使用
1 2 3 4 | def f(x): global globalValue print(globalValue + x) globalValue += 1 |
如果需要访问函数的内部状态,最好使用类。通过使类实例成为可调用的函数,可以使其行为类似于函数,这可以通过定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class StatefulFunction( object ): def __init__( self ): self.public_value = 'foo' def __call__( self ): return self.public_value >> f = StatefulFunction() >> f() `foo` >> f.public_value = 'bar' >> f() `bar` |
使用Globals也会让你的程序一团糟-我建议你尽量避免使用Globals。也就是说,"global"是python中的一个关键字,因此可以将特定变量指定为全局变量,如:
1 2 3 | def foo(): global bar bar = 32 |
我应该提到,使用"global"关键字是非常罕见的,所以我认真地建议重新考虑您的设计。
您可以使用模块范围。假设您有一个名为
1 2 3 4 | f_value = 'foo' def f(): return f_value |
1 2 3 4 5 6 | >> import utils >> utils.f() 'foo' >> utils.f_value = 'bar' >> utils.f() 'bar' |
请注意,可以按名称导入函数:
1 2 3 4 5 | >> import utils >> from utils import f >> utils.f_value = 'bar' >> f() 'bar' |
但不是属性:
1 2 3 4 | >> from utils import f, f_value >> f_value = 'bar' >> f() 'foo' |
这是因为您在本地作用域中将module属性引用的对象标记为