Skip to main content
 首页 » 编程设计

python:我可以在模块本身中导入模块命名空间吗

2025年05月04日16kuangbin

如果在函数中对变量名称进行赋值,则变量名称被声明为局部的,并且我想从函数中访问模块变量,我可以在模块中导入模块名称,然后使用它来访问模块吗变量 ?

示例(文件名: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 语句中,否则您将递归。