首页 > python学习 > Python中的模块
2017
09-27

Python中的模块

模块是Python中组织代码的基本方式

Python的脚本都是用扩展名为py的文本文件保存的,一个脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module),另外.pyc和.pyo文件也可以当作模块,当调用模块时,如果该模块文件是.py,那么会自动在该模块所在目录生成一个名字相同的.pyc编译文件,加快以后的调用执行的速度。

dir(模块名):可以获取模块的所有包含的类、方法或属性
属性"__all__"(并非所有模块都有这个属性)表示模块编写者想要外部直接使用的类、方法或属性,使用from 模块名 import *的方式导入只能导入该属性指定的所有对象,该属性没有指定的对象不会被导入
属性"__file__"表示该模块的代码文件所在的位置
属性"__cached__"表示该模块的编译文件所在的位置

Python中的模块可以按照目录组织为包(package),创建一个包的步骤是:

1、建立一个名字为包名字的文件夹

2、在该文件夹中创建一个__init__.py文件(存放包的信息,可以为空)

3、根据需要在该文件夹下存放脚本文件

4、导入模块时使用包名.模块名的方法,使用模块中的函数时包名.模块名.函数名()

模块的导入:

1、import 模块名 / import 模块名 as 变量名(将导入的模块对象赋值给一个变量,可以理解成模块别名)

在后面调用模块中的函数时使用模块名.函数名()或者模块别名.函数名()的方式调用。

模块名与脚本的文件名相同(不包含.py),可以在模块内部使用全局变量,而无需担心它将来与某个用户的全局变量在导入模块时意外冲突。

出于性能考虑,每个模块在每个解释器会话中只导入一遍。因此,如果修改了模块,需要重启解释器;

也可以用importlib模块中的函数reload(module)重新加载模块(python3中取消了reload()内置函数,整合到了importlib模块中)。reload会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块,reload后还是用原来的内存地址。reload不支持 from ××× import ××× 格式的模块进行重新加载。

2、from 模块名(包名) import 函数1(模块1)[,函数2(模块2),...] :从包导入模块或从模块导入某个或某些对象。

如导入某个模块的某个函数,直接调用函数名()即可,不需要模块名.函数()这种方式

如导入摸个包的某个模块,直接模块名.函数名()调用即可,前面不需包名.模块名.函数()的方式调用。

可以导入一个模块或包中的所有对象或模块:from 模块名(包名) import *

3、__import__(module) 函数用于动态加载类和函数 。如果一个模块经常变化就可以使用 __import__() 来动态载入。

PS:如果模块脚本中本身有输出或者某些操作,我们调用的时候使用Python内置属性__name__来判断当前的是否是脚本本身的运行(此时__name__的值为__main__)或者是在被作为模块调用时的运行(此时__name__的值为作为本调用的模块名,也就是文件名。

调用模块时的搜索路径:

总的来说会按照sys模块的sys.path属性中给出的目录逐个查找,sys.path给出的目录可以按照查找顺序分为5个部分:
1、程序的根目录:这个根目录依赖于你怎么运行代码,当运行一个程序时是程序运行入口文件所在目录;当用交互式窗口运行代码时就是你所在的工作目录。
2、PYTHONPATH环境变量设置的目录,因为这个搜索在标准库之前,所以要小心不要覆盖一些标准库的同名模块。
3、标准库的目录
4、.pth文件列出的目录 :它允许用户以每行一个的方式列出搜索路径,它和PYTHONPATH环境变量的不同是会在标准库路径之后搜索;而且它是针对这个python安装的,而不是针对用户的(环境变量会随着用户的不同而不同)。 那么,.pth文件应该放在哪里呢?可以通过site.getsitepackages()(要先导入site模块)找到.pth文件可以放置的位置
5、第三方扩展的site-package目录,Lib/site-package目录,这一般是第三方扩展安装的地方,一般是由distutils工具发布的。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。