多版本python共存,模块,包的导入,locals(),glo
2017-12-24 本文已影响87人
在路上phper
python多版本共存 来到python的安装目录 找到python.exe可执行文件 将其改成不同的版本名即可 例如python36 然后在cmd里面输入python36就进入到python3.6版本
mains.py为本次演示的入口程序 要引用functions.py这个函数库
使用impprt直接引用模块 后缀名可以省略 python将一个文件当做一个模块
第一种引入外部文件方法
![](https://img.haomeiwen.com/i2509361/5a5bb5139b5ff19f.png)
functions.py里面代码
![](https://img.haomeiwen.com/i2509361/e8be4358776d451a.png)
第二种方法引入外部模块 通过变量名方式
![](https://img.haomeiwen.com/i2509361/fec78625ffd88a3c.png)
模块搜索方式
模块搜索的路径 首先在内置模块里面搜索 如果找不到则去sys.path里面去寻找 sys模块 内置系统模块 访问由解释器使用或维护的变量 通过它可判断当前python的版本
![](https://img.haomeiwen.com/i2509361/4e980d9f7a1b6b23.png)
看下面一段代码 这么引入会覆盖当前入口文件定义的showName()函数值 functions函数库中也有同名的showName()函数
![](https://img.haomeiwen.com/i2509361/f0a8e6012abd7c3c.png)
这么写就不会覆盖
![](https://img.haomeiwen.com/i2509361/f9098cc6fa3a0e9d.png)
为了理解上面的两种情况 引入两个内置函数
locals()以字典形式返回当前局部符号表(包括定义的变量函数类内置函数文件路径等)
globals()以字典形式返回当前全局符号表
![](https://img.haomeiwen.com/i2509361/ba59b66e1380a1a5.png)
下面这种二者有区别
![](https://img.haomeiwen.com/i2509361/c567c631c6f2ee09.png)
import 和 from ... import下面locals的区别
![](https://img.haomeiwen.com/i2509361/0d63a720927d35fb.png)
![](https://img.haomeiwen.com/i2509361/86f77028ce92bd1a.png)
简单使用包 包的作用是管理模块的 init.py文件是区别该文件夹是普通文件夹还是python的包的
![](https://img.haomeiwen.com/i2509361/c43eff506ffc5c06.png)
![](https://img.haomeiwen.com/i2509361/dee3c9aee58cdc8b.png)
项目目录结构
![](https://img.haomeiwen.com/i2509361/265da307e8b36362.png)
可不可以直接导入common 然后引用呢 这种情况需要在init.py中预引用 即在里面输入import common.functions(此种方式不建议使用)
![](https://img.haomeiwen.com/i2509361/403d4804ea739dd4.png)
此时init.py里面代码为
![](https://img.haomeiwen.com/i2509361/629a0f7a14e20a25.png)
下面这种方式需要在init.py文件中定义一个all数组来控制导入的模块 此方式为官方推荐的方式 all在init文件中控制模块的加载
![](https://img.haomeiwen.com/i2509361/611b4811d98e2a26.png)
此时init.py里面内容为
![](https://img.haomeiwen.com/i2509361/a5cde4236c1548b8.png)
all数组也可以定义在公共函数库中用来控制要导出哪些变量
![](https://img.haomeiwen.com/i2509361/b97979afa60f383a.png)
此时在functions.py里面加入
![](https://img.haomeiwen.com/i2509361/6741d7e729e8caef.png)
![](https://img.haomeiwen.com/i2509361/294f21f1d8aa5df6.png)