2016年10月12日星期三

python 模块之间调用变量与函数

python模块之间的变量调用与命名空间有很大关联

每个模块之间的变量都是独立的命名空间
而命名空间又有globals() 与locals()
所以使用global去定义全局变量是无法再模块之间去调用的 (已经通过实验证实)

当一行代码要使用变量 x 的值时,Python会到所有可用的名字空间去查找变量,按照如下顺序:
1.局部名字空间 - 特指当前函数或类的方法。如果函数定义了一个局部变量 x,Python将使用这个变量,然后停止搜索。
2.全局名字空间 - 特指当前的模块。如果模块定义了一个名为 x 的变量,函数或类,Python
  将使用这个变量然后停止搜索。
3.内置名字空间 - 对每个模块都是全局的。作为最后的尝试,Python将假设 x 是内置函数或变量。

所以只能通过以下方法实现:
1:  import sys  
2:      sys.module['__main__'].vars  

if __name__ = '__main__': 作用:
在模块测试代码的时候就用使用
如果在它之后的代码被运行,说明该模块是直接运行的,也就说主模块
如果在它之后的代码没有被运行,说明该模块是被模块调用的

比如有一个varmain.py脚本
varmain.py实际上是两个模块,一个是__main__,一个是varmain,也就是说,这个文件会被载入两次。
你设置的是__main__中的hello,不是varmain中的hello。

__init__.py文件的作用:
如果一个文件夹下面有这个文件,说明它被档次package使用了
当用该package的时候,这个文件就会被执行一遍

1:  附:模块查找的顺序  
2:        sys.path 可以查看到  
3:        sys.path.append 可以增加搜索路径  
4:        先是查找当前路径下  
5:        再去查找lib目录  
6:        最后是 site-packages  


Question:
还有python的原始关键字如何打印与保存,并且用于正则表达式的测试

参考链接:
1. python实现调用其他python脚本的方法,实现调用python脚本
2. Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
3. Python 中的模块和包
4. Python导入模块的几种姿势
5. [Python学习] 专题六.局部变量、全局变量global、导入模块变量






没有评论:

发表评论