什么是模块
计算机开发过程中,随着程序代码越写越多,在一个文件夹里代码就会越来越长,越来越不容易维护
为了编写可维护的代码,把函数分数,分别放到不同的文件里,这样,每个文件包含的代码就相对减少,在Python中一个.py文件就是一个模块
模块分为三种
1、内置标准模块
2、第三方开源模块
3、自定义模块
调用模块的方式
1、import module_name(module_name就是模块名)
PS:import 模块的时候必须先要用sys模块下的path方法定义好模块的调取路径,否则无法调取
2、from module import xx (modulie=文件夹名称)
PS:这样倒入比较方便,不用做调用路径设置,缺点就是如果调用的模块名和代码中的函数名相同,则容易被覆盖
3、from spam import read1 as read(从文件夹倒入模块并调用模块下的方法并重新命名)
PS:如果遇到自定意义模块下的函数名和代码下的函数名相同,或者调用的模块下的方法名字过长,那么在调用的时候可以自己重命名
4、from spam import read1,read2,money(连续调用一个模块下的多个函数)
5、from spam import * (调取指定文件夹下的所有模块)
调用的时候区分模块和文件
编写好的一个python文件可以有两种用途
一:脚本,一个文件就是整个程序,用来被执行
二:模块,文件中存放着一堆功能,用来被导入使用
python为我们内置了全局变量__name__
当文件被当做脚本执行时:__name__ 等于'__main__'
当文件被当做模块导入时:__name__等于模块名
PS:写好的代码最后加上这个 if __name__ == '__main__'语句,然后将文件调用的指令放入这个语句后面,则在倒入调用的时候不会执行,而直接执行这个文件的时候才会执行代码下的执行命令
什么是包
包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来
需要强调的
1. 在python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错
2. 创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块
包的本质就是一个文件夹
那么文件夹唯一的功能就是将文件组织起来 随着功能越写越多,我们无法将所以功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性
关于包相关的导入语句也分为import和from ... import ...两种
但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:
凡是在导入时带点的,点的左边都必须是一个包,否则非法
可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。
但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)
import导入文件时,产生名称空间中的名字来源于文件,import 包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件
包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间