美文网首页思科DevNet
PYTHON多模块文件共享变量

PYTHON多模块文件共享变量

作者: 晓函 | 来源:发表于2016-05-23 01:23 被阅读0次

首先,在python,
5文件,共享变量x存在glovar.py里面,需要在任意模块都能更改,更改后任意模块获取到的值都相同,这就是多模块文件共享一个变量

#5个文件的路径
c:\test\main.py
c:\test\show.py
c:\test\test.py
c:\test\common\__init__.py #空文件
c:\test\common\glovar.py
c:\test\common\calc.py
#glovar.py
x = 1
#show.py
from comon import glovar
class Show:
  def showchange(self):
    if glovar.x!=1:
      print 'show x change'
    else:
      print 'show x=1'
#test.py
from comon.glovar import x
class Test:
  def testchange(self):
    if x!=1:
      print 'test x change'
    else:
      print 'test x=1'
#calc.py
import glovar
class Calc:
  def add(self):
    glovar.x+=1
#main.py
from comon import glovar

c = Calc()
c.add()

s = Show()
s.showchange()

t = Test()
t.testchange()

运行main.py

#输出
show x change
test x=1

上面这些文件,除了test.py失败,其他文件都能共享变量能成功,是因为python的命名空间相同,靠的就是import用正确
来看看这三种不同

import glovar
from comon import glovar
from common.glovar import x

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

===

import glovar和from comon import glovar的命名空间是一样的,key都是glovar

from common.glovar import x 则不一样,test.py中这样from import,就相当于在test.py文件中写了一行代码x = 1,
此时x就是test自己命名空间中的变量。所以x只在test.py中有效,无聊自己如何对x修改,都无法影响glovar 中的x

#换种说法
from glovar import x
#等同于
improt glovar
x= glovar.x
#你调用x的时候,就是自己的命名空间中的x
#当你执行x=2时,完全影响不到glovar.x

下面是解释

#引入当前glovar文件,此时namespace是glovar
import glovar

#从common目录中引入glovar,此时namespace是glovar
from comon import glovar

#从common目录中的glovar文件中引入x=1,此时namespace就是引用者,也就是上面的test.py
from common.glovar import x 

所以,如果需要共享变量,就不要使用from file import x这种形式,而是使用import file,然后就可以通过file.x来使用,然后file.x='abc'可以进行修改。这样都这样处理全局性的变量就可以共享的。也就是保持一个独立的namespace,这样python不会再次导入,从而实现共享。

相关文章

  • PYTHON多模块文件共享变量

    首先,在python,5文件,共享变量x存在glovar.py里面,需要在任意模块都能更改,更改后任意模块获取到的...

  • 6、Python的组织结构

    python的层级结构:包 -> 模块 -> 类 ->函数、变量 包:文件夹,模块:文件 命名空间:...

  • 模块和包

    模块 就是一个Python文件。一个空的Python文件也可以称为模块。多数情况下一个Python文件包含变量、函...

  • 包和模块

    一、python中包和模块的区别: 1.包:包含 文件的文件夹,导入模块的可通过 变量。2.模块:编写python...

  • Python_工程的组织结构

    一、Python项目的组织结构:包、模块、类(函数、变量) 包:可以理解为文件夹模块:.py文件类:包含函数、变量...

  • 包的引入

    模块和包模块:python中每个python文件都是一个独立的模块较少的、独立的、功能近似的 多个变量、函数、类型...

  • Python官方教程阅读总结-模块

    模块(module):包含python语句的文件 模块的文件名:模块名.py 变量__name__的值记录了一个模...

  • 2018-04-05

    文件与文件路径读写文件用shelve模块保存变量 1 python 读写文件 1.1 文件与文件路径 window...

  • CommonJS

    默认每个文件的变量为私有,作用域只在这一文件中要共享变量:用 global module 变量代码当前模块expo...

  • Python shelve模块保存变量

    利用shelve模块,保存python程序中的变量到二进制shelf文件中。 将变量写进文件中,shelfFile...

网友评论

    本文标题:PYTHON多模块文件共享变量

    本文链接:https://www.haomeiwen.com/subject/mpkarttx.html