·一、模块
模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。
当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。
模块主要有三种:
- Python标准库
- 第三方模块
- 应用程序自定义模块
另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
二、模块导入
1.import语句
import module1[, module2[,... moduleN]
Python解释器有自己的搜索路径,存在sys.path里,然后通过此路径找到相应文件。但如果在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉。
引用多个时,用逗号隔开
2.from...import语句
from modname import name1[, name2[, ... nameN]]
此声明不会把整个modulename模块导入到当前的命名空间中,只会将它里面的name1或name2单个引入到执行这个声明的模块的全局符号表,要几个引几个。
省力的办法:
from modname import *
该方法可以一次性导入一个模块中的所有项目,但容易因为引入的其它来源的命名,很可能覆盖了已有的定义。
3.运行本质
#1 import test #2 from test import add
无论1还是2,首先通过sys.path找到test.py,然后执行test脚本(全部执行),区别是1会将test这个变量名加载到名字空间,而2只会将add这个变量名加载进来。
三、包(package)
包就是一个包含有__init__.py文件的文件夹,所以其实创建包的目的就是为了用文件夹将文件/模块组织起来。
在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错。
创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块
注意事项
1.关于包相关的导入语句也分为import和from ... import ...两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
2、import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件
3、包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间
.py执行时会把自己的上一级目录加载进去,而上一级目录所包含的.py文件,即与执行目录在同一级的文件可直接import,若在同一层有一个包,要引用该包下的模块或者.py文件,则应
from 包名 import .py
涉及多层的,层与层之间用.连接。