1.模块
-
可以增加代码的重复利用的方式
-
避免命名冲突
-
如何定义模块
- 模块就是一个普通文件,所以任何代码可以直接书写
- 规范
- 函数(单一的功能)
- 类(相似功能的组合,或者类似业务模块)
- 测试代码
-
如何使用模块
-
模块直接导入
- 假如模块名称直接以数字开头,需要借助importlib帮助
-
语法
import module_name module_name.function_name module_name.class_name 复制代码
-
import 模块 as 别名
- 导入的同时给模块起一个别名,其余用法和第一种一样
-
from module_name import func_name, class_name
- 有选择性导入,模块的一部分
-
import module_name import *
- 导入模块所有内容
- 不需要模块前缀
-
-
if name = 'main'的使用
- 可以有效避免模块代码被导入的时候被动执行的问题
- 建议所有程序的入口都以此代码为入口
2.模块的搜索搜索路径和存储
-
什么是模块的搜索路径
- 加载模块的时候系统会在哪些地方寻找此模块
-
系统默认的模块搜索路径
import syssys.path 属性可以获取路径列表 复制代码
-
添加搜索路径
sys.path.append(dir) 复制代码
包
-
是一种组织管理代码的方式,包里存的是模块
-
自定义包的结构
/---包/---/--- __init__.py 包的标志性文件/---/--- 模块1/---/--- 模块2/---/--- 子包(子文件夹)/---/---/--- __init__.py 包的标志性文件/---/---/--- 子模块1/---/---/--- 子模块2 复制代码
-
包的导入操作
- importpackage_name
-
直接导入一个包,可以使用__init__.py 中的内容
-
使用方法
package_name.func_name package_name.class_name.func_name() 复制代码
-
此种方式的访问内容是
-
- importpackage_name
-
from ... import 导入
- from package import module1,module2,module3...
- 此种方法不执行__init__.py 的内容
- form package import *
- 导入当前包__init__.py 文件中的所有函数和内容,没有前缀
-
from package.module import *
- 导入保重指定模块的所有内容
-
在开发环境中经常会使用其他模块,可以直接导入其他模块中的内容
- import 完整包或者模块的路径
-
__all__的用法
- 在使用from package import * 的时候,*可以导入的内容
- 如果__init__.py中的文件为空,或者没有__all__ ,那么只能把__init__ 中的内容导入
- 如果__init__中如果设置了__all__ 的值,那么则按照__all__ 指定的子包或者模块进行导入,如此则不会载入__init__ 中的内容
- 用法__all__ = ['module1','module2','package1',...]
命名空间
- 用于区分不同位置不同功能但相同名称的函数变量的一个特定前缀
- 作用是防止命名冲突