Python导入模块包原理及相关注意事项


Posted in Python onMarch 25, 2020

包的使用

1.首次导入模块发生的事情3件事情

先产生一个执行文件的名称空间:

1.创建模块文件的名称空间

2.执行模块文件中的代码 将产生的名字放入模块的名称空间中

3.在执行文件中拿到一个指向模块名称空间的名字

2.什么是包?

  • ​ 它是一系列模块文件的结合体,表示形式就是一个文件夹
  • ​ 该文件夹内部通常会有一个__init__.py文件
  • ​ 包的本质还是一个模块

3.首次导入包发生的事情

首次导入包:

先产生一个执行文件的名称空间

1.创建包下面的__init__.py文件的名称空间

2.执行包下面的__init__.py文件中的代码 将产生的名字放入包下面的__init__.py文件名称空间中

3.在执行文件中拿到一个指向包下面的__init__.py文件名称空间的名字

4.为什么要有包?

 模块的第一个版本只有10个功能,但是未来在扩展版本的时候,模块名和用法应该最好不要去修改,但是这只是对使用者友好,而由于版本扩展,文件越来越大,模块设计者对模块的管理、维护会越来越复杂,因此我们可以使用包来扩展模块的功能。

5.python2和Python3中导入包注意事项

  • python2如果要导入包 包下面必须要有__init__.py文件
  • python3如果要导入包 包下面没有__init__.py文件也不会报错

当你在删程序不必要的文件的时候 千万不要随意删除__init__.py文件

包 == 模块, 包拿来导入用的

包是含有__init__.py的文件夹; 导包就是导入__init__

'''
包一定是被当作模块文件导入,模块文件 m1.py/m2.py 的搜索路径以执行文件 包的介绍.py 路径为准,在执行文件所在的文件夹只能看到包aaa,而找不到包aaa内的m1.py文件。
'''
#包  
##aaa
###__init__.py
from m1 import f1
###m1.py
def f1():
  print('来自m1中的f1')
##包的介绍.py(执行文件)
import aaa
print(aaa.f1)
'''
打印结果
ModuleNotFoundError: No module named 'm1'
'''
#正确的导包的方式,绝对导入(一层包)
#包
##包的介绍.py(执行文件)
import aaa  #包aaa
print(aaa.f1)
print(aaa.f2)
###__init__.py # 包aaa内文件
from aaa.m1 import f1 # 不符合包的原则
from aaa.m1 import f2 # 不符合包的原则
###m1.py # 包aaa内文件
def f1():
  print('来自m1中的f1')

def f2():
  print('来自m1中的f2')
'''
<function f1 at 0x000000000BC94F28>
<function f2 at 0x000000000BCA7048>
'''
#正确的导包的方式,绝对导入(二层包)
#包
##包的介绍.py(执行文件)
import aaa #包aaa
print(aaa.f5)
print(aaa.f5())
###__init__.py # 包aaa内文件
from aaa.bbb.m3 import f5 # 不符合包的原则
###m1.py # 包aaa内文件
def f1():
  print('来自m1中的f1')
def f2():
  print('来自m1中的f2')
###包bbb
####__init__.py #包bbb内的文件
	pass
####m3.py # #包bbb内的文件
def f5():
  print('来自m3中的f5')
def f6():
  print('来自m3中的f6')
'''
<function f5 at 0x0000000009FF3F28>
来自m3中的f5
'''
或者直接可以在执行文件内还是以绝对导入的方式导入f5也是一样的。
from aaa.bbb.m3 import f5
print(f5)
print(f5())

5.相对导入 和绝对导入

绝对导入:必须以执行文件的搜索路径为基准,比如上面的from aaa.bbb.m3 import f5

​ 相对导入:

  • ​ .表示当前文件夹下的文件
  • ​ ..表示父亲文件夹下的文件
  • ​ ...表示爷爷文件夹下的文件

5.1相对导入引入事例

Python导入模块包原理及相关注意事项

5.2相对导入(练习)

#正确的导包的方式,相对导入(二层包)
#包
##包的介绍.py(执行文件)
import aaa #包aaa
print(aaa.f5)
print(aaa.f5())
###__init__.py # 包aaa内文件
from aaa.bbb import f5
###m1.py # 包aaa内文件
def f1():
  print('来自m1中的f1')
def f2():
  print('来自m1中的f2')
###包bbb
####__init__.py #包bbb内的文件
	from .m3 import f5
####m3.py # #包bbb内的文件
def f5():
  print('来自m3中的f5')
def f6():
  print('来自m3中的f6')
'''
<function f5 at 0x000000000A008048>
来自m3

6.导包注意事项

  • 包内所有的文件都是被导入使用的,而不是被直接运行的
  • 包内部模块之间的导入可以使用绝对导入(以包的根目录为基准)与相对导入(以当前被导入的模块所在的目录为基准),推荐使用相对导入
  • 当文件是执行文件时,无法在该文件内用相对导入的语法,只有在文件被当作模块导入时,该文件内才能使用相对导入的语法
  • 凡是在导入时带点的,点的左边都必须是一个包,import aaa.bbb.m3.f5错误

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
python文件写入write()的操作
May 14 Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
python实现将视频按帧读取到自定义目录
Dec 10 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
Mar 06 Python
Python定时从Mysql提取数据存入Redis的实现
May 03 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
整理Python中常用的conda命令操作
Jun 15 Python
Python脚本导出为exe程序的方法
Mar 25 #Python
Python实现猜年龄游戏代码实例
Mar 25 #Python
python读取mysql数据绘制条形图
Mar 25 #Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 #Python
python画环形图的方法
Mar 25 #Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 #Python
Python语法垃圾回收机制原理解析
Mar 25 #Python
You might like
PHP入门学习笔记之一
2010/10/12 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
js简单实现Select互换数据的方法
2015/08/17 Javascript
解决JavaScript数字精度丢失问题的方法
2015/12/03 Javascript
JS组件Bootstrap实现下拉菜单效果代码
2016/04/26 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Pycharm 设置默认头的图文教程
2019/01/17 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Python将文字转成语音并读出来的实例详解
2019/07/15 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
python实现3D地图可视化
2020/03/25 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
SQL Server笔试题
2012/01/10 面试题
党的群众路线查摆剖析材料
2014/10/10 职场文书
大学生读书笔记大全
2015/07/01 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
HAM-2000摩机图
2021/04/22 无线电
Python机器学习之决策树和随机森林
2021/07/15 Javascript
Win11更新失败并提示0xc1900101
2022/04/19 数码科技