「Python」2020.05.14学习笔记 | 第七章异常和模块 包的概念

  • 学习测试开发的Day133,真棒!
  • 学习时间为1H
  • 第11天全天课下午视频2H05M-2H45M

包的概念

在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包是一个分层的文件目录结构,它定义了一个由模块及子包和子包下的子包等组成的Python的应用环境。

包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹被当作包使用时,文件夹中需要包含init.py文件,主要是为了避免将文件夹名当作普通的字符串。init.py的内容可以为空,一般用来进行包的某些初始化工作或者设置all值,all是在from package-name import*这语句使用的,表示全部导出定义过的模块。如果希望调用同一个package中的module,则直接import即可。

image.png

a.py

b=1
def add(a,b):
    return a+b

class P:
    pass

print("hello world!")

if __name__=="__main__":
    print("hello world!")

b.py

import module

print(module.a.b)

执行:

PS D:\0grory\day11> python b.py
Traceback (most recent call last):
  File "b.py", line 3, in <module>
    print(module.a.b)
AttributeError: module 'module' has no attribute 'a'
PS D:\0grory\day11>

正确的引用方式b.py:

import module.a

print(module.a.b)

执行:

PS D:\0grory\day11> python b.py
hello world!
1
PS D:\0grory\day11>


init.py

办法1:

__all__=["a"]

b.py

from module import *

print(a.b)

执行:

PS D:\0grory\day11> python b.py
hello world!
1
PS D:\0grory\day11>

如果init.py里面是空的,执行就会报错了

init.py

办法2:

from . import a

执行:

PS D:\0grory\day11> python b.py
hello world!
1
PS D:\0grory\day11>

子目录


image.png

a.py

def add(a,b):
    return a+b
image.png

b.py

def multiple(a,b):
    return a*b

D:\0grory\day11\b.py

import gloryroad.a
import gloryroad.submodule.b

print(gloryroad.a.add(1,2))
print(gloryroad.submodule.b.multiple(2,10))

执行结果:

PS D:\0grory\day11> python b.py
3
20
PS D:\0grory\day11>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。