import 导入模块或包
import 机制
# Python 中一个以 .py .pyc .pyd结尾的文件就是一个模块
# 包是存放模块的文件夹,包中包含 __init__.py 和其他模块
import 模块或者包
引入一次即可,模块不会被重复导入。
因为在主程序开始时,已经创建了sys.module记录了所有需要的模块。
因此再次导入只是从sys.module中导入(目的是为了程序的效率)
调用的时候:
模块.变量
模块.函数
模块.类
import 模块或者包 as 模块或者包的别名
别名.变量
别名.函数
别名.类
# import导模块的时候,会从sys.path提供的路径下去找,找不到就报错
# import sys
# print(sys.path)
from .. import .. 从哪导入什么东西
调用的时候:
直接使用这个变量
直接使用这个函数
直接使用这个类
可以导入多个或者单个
|main.py
|module1.py
# ------------------------------
main.py
from module1 import * #见下面 __all__的解释
from module1 import girl
from module1 import girl as g,boy as b #多个
# ------------------------------
module1.py
__all__ = ['boy']
boy = '小明'
girl = '小红'
# 返回模块名字的魔术属性 __name__
如果当前文件是直接运行的,返回"__main__"字符串
如果当前文件是间接导入的,返回当前文件名(模块名)
# 变量 __all__, 该变量的值是一个列表,存储的是当前模块中一些成员(变量、函数或者类)的名称
通过在模块文件中设置 __all__ 变量,
当其它文件以“from 模块名 import *”的形式导入该模块时,
该文件中只能使用 __all__ 列表中指定的成员
__all__ 变量仅限于在其它文件中以“from 模块名 import *”的方式引入
直接引入包中的成员
# 如果想把包当成模块用,在创建一个__init__.py中进行定义
# 当引入一个包的时候,当前包下的__init__文件自动执行.
import导入某个包下某个模块
# import package1.module1
import 导入某个包下某个模块 用as起别名
# import package1.module1 as pm
# print(pm.girl)
from .. import .. 从哪个包下的哪个模块 具体的导入什么东西
# from package1.module1 import * #所有
# print(boy)
# from package1.module1 import boy #单个
# print(boy)
# from package1.module2 import boy,girl #多个
# print(boy,girl)
单入口模式 : 只通过主文件来调用分模块内容,分模块不单独执行
分模块不能单独进行调用,统一由主文件main进行调用
模块之间的互相嵌套导入,使用相对路径实现
单入口文件必须和包在同一层级,包里面可以含有各种包和模块
# from . import module1 相对于当前路径引入模块
# from .module1 import boy 相对于当前模块引入具体属性
# from .. import module2 相对于上一级引入模块
# from ..pkg2 import pkt1 相对于上一级的某个包引入模块
# from ..pkg2.pkt2 import ce 相对于上一级某个包下的某个模块引入某属性
. 当前路径
.. 上一级路径
... 上一级的上一级
.... 上一级的上一级的上一级
..... (这里的点是无限的)
from .......................................... import 模块