模块和包

模块的定义:一个模块就是一个包含pytho代码的文件, 后缀名是.py,模块就是一个python文件

如何使用模块:
- 假如模块名称直接以数字开头,需要借助importlib帮助
- 语法
import module_name
import 模块 as 别名
from module_name import func_name, class_name
from module_name import *

if __name__ == "__main__"的使用:
- 当模块被直接运行时,该行代码下的代码块将被运行,当模块是被导入时,下面的代码块不被运行
- 建议所欲程序的入口都以此代码为入口(参考资料:https://blog.csdn.net/yjk13703623757/article/details/77918633/)

模块的搜索路径:

- 什么是模块的搜索路径:加载模块的时候,系统会在这些地方寻找此模块
- 获得系统默认的模块搜索路径的方法:
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中的内容
- import package_name as 别名
具体用法跟作用方式,跟上述简单导入一致
注意的是此种方法是默认对__init__.py内容的导入
- import package.module
导入包中某一个具体的模块
- import package.module as 别名
- from package import moudle
- from package import module1, module2, module3, .....
上述俩种导入方法不执行`__init__`的内容
- from package import *
导入当前包'__init__.py'文件中所有的函数和类
可以直接使用'__init__.py'文件中的函数、类、变量
func_name()
class_name.func_name()
class_name.var
- from package.module import *
导入包中指定的模块的所有内容
可以直接使用模块中的函数、类、变量
func_name()
class_name.func_name()
class_name.var

__all__的使用:
表示在使用from package import * 的时候,* 可以导入的内容
- `__init__.py`中如果文件为空, 或者没有 `__all__`, 那么只可以把`__init__`中的内容导入
- `__init__` 如果设置了`__all__`的值,那么则按照`__all__` 指定的子包或者模块进行加载,如此则不会载入`__init__`中的内容
使用方法:__all__=['module1', 'module2', 'package1',.....]

原文地址:https://www.cnblogs.com/wjw2018/p/10514145.html