模块与包

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 模块
posted @ 2021-02-18 11:22  EdenWu  阅读(78)  评论(0编辑  收藏  举报