码迷,mamicode.com
首页 > 编程语言 > 详细

PYTHON-DAY18-包 相对 绝对导入

时间:2018-10-12 23:49:19      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:beyond   功能   sys.path   day   必须   执行   开始   业务逻辑   业务   

什么是包
包也是一种模块,但本质上就是一个文件夹
对于使用者而言 使用方式和模块没有任何区别
本质上就是一个文件夹 不同之处在于 多了一个__init__.py 叫包的初始化文件


import导入模块时发生了三件事情
1.创建名称空间
2.执行模块py文件 加载名称
3.在执行文件产生新的名称 指向模块


在导入包的时候 由于包实际上是一个文件夹 不能被执行 所以包中需要提供__init__.py文件
该文件用于代表这个包
所以上面import pack 实际上时执行了pack下的__init___.py 导入了这个名称


__init__.py文件的作用? ******
说白了就是导入该包下的所有模块 这样一来使用包的人 用起来非常简单 无需关心包中的文件结构
只要导入了包 就能使用包中的所有功能
__init__.py 应该包含什么内容?
不应该包含任何的业务逻辑 仅仅用于导入包中的模块


# 绝对导入: 以执行文件的sys.path为起始点开始导入,称之为绝对导入
# 优点: 执行文件与被导入的模块中都可以使用
# 缺点: 所有导入都是以sys.path为起始点,导入麻烦

from dir0.dir1 import m1 # 执行文件中只能用绝对导入
m1.f1()

# 相对导入: 参照当前所在文件的文件夹为起始开始查找,称之为相对导入
# 符号: .代表当前所在文件的文件加,..代表上一级文件夹,...代表上一级的上一级文件夹
# 优点: 导入更加简单
# 缺点: 只能在导入包中的模块时才能使用,不能在执行文件中用

#注意:
# 1. 相对导入只能用于包内部模块之间的相互导入,导入者与被导入者都必须存在于一个包内
# 2. attempted relative import beyond top-level package # 试图在顶级包之外使用相对导入是错误的,
# 言外之意,必须在顶级包内使用相对导入,每增加一个.代表跳到上一级文件夹,而上一级不应该超出顶级包





PYTHON-DAY18-包 相对 绝对导入

标签:beyond   功能   sys.path   day   必须   执行   开始   业务逻辑   业务   

原文地址:https://www.cnblogs.com/du-jun/p/9780804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!