Python跨模块共享变量

一、采用general import的方法

这方法也是官方文件中FAQ中给出的方法。

  • Python import 包的机制是import进来的和系统的module都放在sys.module这个字典里面
    多个py文件在import的时候,会先去sys.module里面检查是否已经import了,如果已经import了,就不再重复import,否则就import进来。

  • from aaa.yyy import x则不一样,test.py中这样from import,此时x就是test自己命名空间中的变量。所以x只在test.py中有效,无论如何对x修改,都无法影响yyy中的x。

例如:
config.py:

x = 0

mod.py:

import config
config.x = 1

main.py:

import config
import mod
print config.x

这种方法应该也是被大家所使用最多的一种方法。
这里一定要注意要用潜拷贝,不能直接import *种,要保持同样的空间名称。

二、采用import + whole init()的方法

这种方法也是首先定义一个文件
setting.py

def init():
    global x
    x = 0

subfile.py

import setting
def stuff():
    setting.x = 1

在main.py中初始化全局变量

import setting
import subfile

setting.init()
subfile.stuff()
print(setting.x)

Related Posts