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

2024-04-26 18:52:12 发布

您现在位置:Python中文网/ 问答频道 /正文

既然变量名在一个函数中被赋值为局部变量,并且我想从函数中访问模块变量,那么我可以在模块中导入模块名,然后用它来访问模块变量吗?在

示例(文件名:服务器.py)公司名称:

import server

bar = 5

def foo():
   server.bar = 10

Tags: 模块函数pyimport服务器名称示例server
3条回答

不要像所有其他答案中建议的那样使用global语句,而不要使用模块级变量,而是将类用作容器或其他仅用于全局变量的模块:

# mg.py

bar = 5

# server.py
import mg

def foo():
    mg.bar = 10

或者

^{pr2}$

这样你就不需要到处放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

你不能那样进口,你也不需要。直接使用module全局变量。在

def foo():
    global bar
    bar = 10

您需要声明它是全局的,这样就可以设置它,而不是创建一个局部变量。在

相关问题 更多 >