模块
- 一个模块就是一个包含python代码的文件,后缀名是.py即可
- why 使用模块
- 程序太大,编写维护不方便,需要拆分
- 可以增加代码重复利用的方式
- 当做命名空间使用,避免命名冲突
- how to define 模块
- 最好在模块中编写以下内容:
- 函数(单一功能)
- 类(相似功能的组合,或者类似业务模块)
- 测试代码
- 最好在模块中编写以下内容:
- how to 使用模块
模块直接导入
import module_name
module_name.function.name
module_name.class_name
- 若模块名称直接以数字开头,需要借助importlib
import importlib
#导入了一个叫01的模块并把导入模块赋值给了tuling
tuling = importlib.import_module("01")
import 模块 as 别名
- from module_name import func_name,class_name
#有选择性地导入,导入后可直接使用(不需要加上模块名,即没有前缀)
- from module_name import*
#全部导入,也可以直接使用不需要前缀(但会出现命名污染的问题,不推荐使用)
避免模块代码被导入时自动使用
if name == “main”,建议以次作为所有程序的入口
模块的搜索路径和存储
- what is 模块的搜索路径:加载模块时,系统会在哪些地方寻找此模块
- 系统默认的模块搜索路径
import sys
sys.path
- 添加搜索路径
sys.path.append(dir) - 模块的加载顺序
1.先搜索内存中已经加载好的模块
2.搜索python的内置模块
3.搜索sys.path路径
包
- 包是一种组织管理代码的方式,包里面存放的是模块
- 用于将模块组织在一起的文件夹就是包
- 自定义包的结构
/—包
/—/---init.py 包的标志文件
/—/---模块1
/—/---模块2
/—/---子包(子文件夹)
/—/---/—init.py
/—/---/—子包模块1
/—/---/—子包模块2 - 包的导入操作
- import package_name:直接导入一个包,可以使用__init__.py中的内容
package_name.func_name
package_name.class_name.func_name()
- import package_name as 别名
- import package.module as 别名
- from package import module1,module2,… 此种导入方法不执行__init__的内容
- from package import*
- 导入当前包的’init.py’文件中所有的函数和类
- 使用方法
func_name()
class_name.func_name()
class_name.var
- from package.module import*
- 导入包中指定模块的所有内容
- 使用方法
func_name()
class_name.func_name()
__all__的用法
- 在使用from package import* 时,*可以导入的内容
- init.py中如果文件为空,或者没有__all__,那么只可以把__init__中的内容导入
- init.py中如果设置了__all__的值,则按照__all__指定的子包或者模块进行导入,就不会再载入__init__中的内容
- all = [‘module1’, ‘module2’,‘package1’,…]
命名空间
- 用于区分不同位置不同功能但名称相同的函数/变量的一个特定前缀,作用是防止命名冲突
setName()
Student.setName()
Dog.setName()