[英]Can I reliably unimport a Python module if I import it in a namespace?
[英]python: can i import the module namespace within the module itself?
由于如果在 function 中对变量名称进行了赋值,则变量名称被声明为本地变量,并且我想从 function 中访问模块变量,我可以在模块中导入模块名称,然后使用它来访问模块变量吗?
示例(文件名:server.py):
import server
bar = 5
def foo():
server.bar = 10
如所有其他答案中所建议的那样,不要使用global
语句,而是使用模块级变量,而是使用 class 作为容器或仅用于全局变量的另一个模块:
# 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
语句中,否则您将递归。
你不能像那样导入它,你也不需要。 直接使用模块全局变量即可。
def foo():
global bar
bar = 10
您需要将其声明为全局的,以便对其进行设置,而不是创建局部变量。
为什么不:
def foo():
global bar
bar = 10
不,而是使用全局语句:
def foo():
global bar
bar = 10
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.