由于变量名称在函数中有赋值给它们,并且我想从函数中访问模块变量,因此我可以在模块中导入模块名称,然后使用它来访问模块变量?
示例(文件名:server.py):
import server
bar = 5
def foo():
server.bar = 10
答案 0 :(得分:5)
不要像所有其他答案中所建议的那样使用global
语句,不要使用模块级变量,而是使用类作为容器,或者只使用全局变量的另一个模块:
# mg.py
bar = 5
# server.py
import mg
def foo():
mg.bar = 10
或
class mg:
bar = 5
def foo():
mg.bar = 10
通过这种方式,您无需在任何地方添加global
语句,您可以重复使用这些名称,并且明确指出您所指的bar
。
编辑:此外,可以在自身内部导入模块,但不能以这种方式更改主模块中的变量。所以这会奏效:
# selfimport.py
import selfimport
def foo():
print selfimport.foo
bar = 3
if __name__ == '__main__':
print selfimport.bar
foo()
但这不会:
# selfimport.py
import selfimport
bar = 3
def foo():
selfimport.bar = 5
if __name__ == '__main__':
print selfimport.bar
foo()
print bar # bar is still 3!
如果您只使用全局变量作为常量,那么无论如何都不需要global
语句。您还需要确保在上面的if
语句中包装您只想在主模块中执行的代码,否则您将会递归。
答案 1 :(得分:1)
你无法像那样导入它,而且你不需要。只需直接使用module-global变量即可。
def foo():
global bar
bar = 10
您需要将其声明为全局,以便设置,而不是创建局部变量。
答案 2 :(得分:1)
为什么不:
def foo():
global bar
bar = 10
答案 3 :(得分:0)
不,而是使用全局声明:
def foo():
global bar
bar = 10