编程语言
首页 > 编程语言> > python之包

python之包

作者:互联网

python之包

文章目录

一、包的介绍

# 官网解释
Packages are a way of structuring Python’s module namespace by using “dotted module names”
包是一种通过使用‘.模块名’来组织python模块名称空间的方式。

什么是包?

包的本质

python包的目的不是为了运行的。而是被导入使用的, 被导入和被右键运行是截然不同的两件事,包是模块的一种形式,换句话说包的本质就是一种模块。

为什么要用包?

包存在的意义:

示例:

pool/                #顶级包
├── __init__.py     
├── futures          #子包
│   ├── __init__.py
│   ├── process.py
│   └── thread.py
└── versions.py      #子模块

包下面的 __init__.py 文件介绍

包下面的__init__.py存在的意义:

当你在运行文件夹的时候,有一个文件可以代替运行。这就是包下的__init__.py文件所存在的一样意义。

python3中与python2中的__init__.py存在的必要性:

你需要考虑的是,如果下面存放了好多模块,当然每个模块都应该有自己自己的名字。我们需要把这些名字拿到__init__.py里面, 才能使用。python3中即便没有这个__init__.py文件也不会报错,pyhon2二中就会报错。所以在python2中必须要有__init__.py这个文件。

二、使用包的注意事项

三、导入包发生的三件事

# 假设我创建一个名为 "aaa" 的包
import aaa   # 导入包 "aaa"

print(aaa.x)  # "aaa.x"就是向 "__init__.py" 要一个名字 "x"

四、绝对导入与相对导入

绝对导入

一层包示例

'''
包/                    
├── aaa/          # 顶级包
│   ├── __init__.py
│   ├── xxx.py	#子模块
│   └── yyy.py	#子模块
└── run.py      # 执行程序
'''

# "__init__.py" 内容
print("i am aaa.__init__")  # 包被导入就会被执行

from aaa.xxx import f1
from aaa.yyy import f2

# "xxx.py" 内容
def f1():
    print("i am xxx")
    
# "yyy.py" 内容
def f2():
    print("i am yyy") 
   
# "run.py" 内容  # 执行文件
import aaa

aaa.f1()
aaa.f2()
''' 执行结果
i am aaa.__init__
i am xxx
i am yyy
'''

二层包示例

'''
包/   
├── aaa         #顶级包
│   ├── __init__.py
│	├── bbb          # 子包
│ 	│   ├── __init__.py
│ 	│   └── zzz.py 	# 子模块
│  	└── xxx.py      # 子模块
│	└── yyy.py      # 子模块
└── run.py      #执行程序
'''
# "aaa"下"__init__.py" 内容
from aaa.xxx import f1
from aaa.yyy import f2
from aaa.bbb.zzz import f3

# "xxx.py" 内容
def f1():
    print("i am f1")
    
# "yyy.py" 内容
def f2():
    print("i am f2")

# "bbb"下"__init.py" 内容
from aaa.bbb.zzz import f3

# "zzz.py" 内容
def f3():
    print("i am f3")
    
# "run.py"  内容  # 执行文件
import aaa

aaa.f1()   # 没有改变用户的调用方式
aaa.f2()   
aaa.f3()
''' 执行结果
i am f1
i am f2
i am f3
'''

相对导入

示例:

'''
包/                 
├── mmm/          # 顶级包
│   ├── __init__.py
│   ├── m1.py	#子模块
│   ├── m2.py	#子模块
│   └── m3.py	#子模块
└── run.py      # 执行程序
'''
# "__init__.py"  内容
from .m1 import f1
from .m2 import f2
from .m3 import f3

# "m1.py"  内容
def f1():
    print("i am m1.f1")
    
# "m2.py"  内容
def f2():
    print("i am m2.f2")
    
# "m3.py"  内容
def f3():
    print("i am m3.f3")
    
# "run.py"  内容
import mmm

mmm.f1()   # 使用者调用方式不变
mmm.f2()
mmm.f3()
'''  执行结果
i am m1.f1
i am m2.f2
i am m3.f3
'''

五、绝对导入与相对导入总结

绝对导入

相对导入

六、from…import *

ps : 用户无法区分模块是文件还是一个包,我们定义包是为了方便开发者维护

标签:__,__.,之包,python,py,init,导入,import
来源: https://blog.csdn.net/weixin_44621343/article/details/115710376