如果在函数中对变量名称进行赋值,则变量名称被声明为局部的,并且我想从函数中访问模块变量,我可以在模块中导入模块名称,然后使用它来访问模块吗变量 ?
示例(文件名:server.py):
import server
bar = 5
def foo():
server.bar = 10
请您参考如下方法:
不要像所有其他答案中所建议的那样使用 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 语句中,否则您将递归。
