繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM