模块与包
-
模块定义
-
模块分类
-
如何导入模块
-
包定义
-
包的结构
-
如何导入包中的模块
-
导入方式的分类
-
python搜索路径
-
如何查看python的搜索路径
-
添加搜索路径
-
单入口程序
code:_19modules_and_bags.py
# ***************************************************************
"""
python中的模块与包:
模块定义:就是一个python脚本,后缀名为.py。
模块中通常会定义相似的类、函数等代码内容,提供给别的程序引入后使用。
模块分类:
1.系统模块:在安装python环境时安装的,需要时使用import导入
import logging,json,time...
2.自定义模块:自己创建的python脚本,定义一些类和方法,提供给别的脚本导入后使用。
自定义模块中,通常只是去定义类或函数、变量等,并不调用
如果在自定义模块中想要测试时(只希望在本脚本中执行,不希望在调用本脚本的脚本中执行),则可以添加判断条件:
if __name__ == '__main__':
测试代码
如何导入模块:
1.import module
2.from module import content
3.from module import content as newname
包定义:一个文件夹包含了多个python脚本。
包的结构:
包(文件夹)
|------ __init__.py # 包的标志性文件(可以有内容,也可以没有内容)
|------ a.py # a模块(文件)
|------ b.py # b模块(文件)
|------ 。。。
|------ 子包(文件夹中的文件夹)
|------ | ------ __init__.py
|------ | ------ c.py # c模块(文件)
|------ | ------ d.py # d模块(文件)
|------ | ------ ...
如何导入包中的模块:
1.导入__init__.py中的__all__中包含的全部模块
from My import *
2.导入包中的指定模块
from My import a
3.导入包中指定模块的指定内容
from My.b import funcb
4.导入包中的包
from My.You import *
5.导入包中的包中的模块
from My.You import c
5.导入包中的包中的模块的指定内容
from My.You.d import funcd
导入方式的分类:
绝对导入:绝对导入会使用[搜索路径]去查找和导入指定的包或模块
import 模块
import 包
import 包.模块
from 模块 import 内容
from 包 import 模块
from 包.模块 import 内容
等等
相对导入:只能在非主程序的模块中使用,不需要直接运行文件
from .包名/模块名 import 模块/内容:.代表当前
from ..包名/模块名 import 模块/内容:..代表上一级
python搜索路径:在导入模块或包时,程序查找的路径
1.当前路径
2.python的安装目录中
3.python编译器指定的其他第三方模块位置
如何查看python的搜索路径:
import sys
print(sys.path)
添加搜索路径:
sys.path.append(路径)---但是不推荐这样做
单入口程序:整个程序是一个主程序文件在运行,其他脚本都封装成了包或模块。
ATM/
|----main.py # 当前程序的主入口文件,单入口文件,唯一直接运行的文件,必须绝对导入其他需要的文件
|----package/ # 主要程序模块包
|----|----__init__.py # 包的初始化文件
|----|----View.py # 视图函数模块
|----|----Controller.py # 控制器模块
|----|----Card.py # 银行卡模块
|----|----User.py # 用户模块
|----databases/ # 数据存储文件夹
|----|----user.txt
|----|----user_card.txt
"""
import _20user_defined_module1
from _20user_defined_module1 import func as func_main
# from My import * # 1
# from My import # 2
# from My.b import funcb # 3
# from My.You import * # 4
# from My.You import c # 5
from My.You.d import funcd # 6
import sys
print("模块***************************************************************")
data1 = _20user_defined_module1.user_class()
_20user_defined_module1.func()
print(f"name = {_20user_defined_module1.name}")
func_main()
print("包***************************************************************")
# a.funca() # 1
# b.funcb()
# a.funca() # 2
# funcb() # 3
# c.funcc() # 4
# c.funcc() # 5
funcd() # 6
print("python搜索路径******************************************************")
print(sys.path)