前两天和大家探讨了Python的模块化编程,相信大家已经对于Python的模块定义啦、模块的加载啦都了如指掌啦,今天呢,咱们就一起来聊聊Python模块导入的本质吧,相信大家看完这次的东东,就真的能够抓住Python模块加载也就是所谓的导入模块的“精髓”了哦!

好啦,那下面我们就开始吧!


首先呢,就直接开聊模块导入的“精髓”吧

还是老惯例哦,为了能够让大家更为直观的理解,咱们还是举个“栗子”吧:

接下来呢,咱们就用上面咱们定义滴这个模块(mymodule.py)来测试一下吧,那怎么测试呢?当然是再写个测试程序啦,请见如下哦:

注意一下哦,这里俺写的这个mymodule_test.py程序是放在与定义的模块mymodule.py在同一个路径下了哦,当然啦,不再同一路径下也是可以加载滴,具体加载方法看俺前两天写的东东哦,在这就不再说啦哈!

下面咱们就运行一下这个测试程序吧,运行结果如下图所示哦:

看到输出结果了嘛,相信大家对于这些输出能够看懂,咱们来解释一下吧,首先呢,当程序导入mymodule模块之后呢,这个模块中的输出语句就会在import时自动执行哦,当然啦,这个程序中还包含一个与模块相同名字的变量哦,这个变量的类型就是module哦。

到这相信大家已经看明白了哦,导入模块import mymodule的本质和精髓就是哈:将模块mymodule中滴全部代码加载到内存并且执行哦,然后呢就是将整个模块的内容都赋值给与模块同名滴变量哦,这个变量滴类型就是module,因此呢,这个模块中定义的所有所有东东都相当于这个模块mymodule对象滴成员哦。

好啦,为了能够使大家再深入了解一下,咱们再换一个方式吧,就是直接导入模块的单元东东试试哦,请看下图哦:

这个测试程序mymodule_test_again.py又会输出啥呢?咱们就运行一下看看吧,请看下图哦:

这和上面的又有什么区别呢?不要着急,咱们来分析一下吧,如果你使用from…import只导入模块中的部分成员的话,这个模块中的输出语句也会在import时自动执行哦,这说明啥呢?这说明哈,Python很聪明,就是这样Python它也依然会加载并且执行这个模块中滴代码哦。

因此呢,你使用from mymodule import name, hi导入模块中成员的本质就是:将mymodule.py中的全部代码都加载到内存并执行哦,然后就只导入你所指定滴成员哦,并不会将整个模块导入哦,所以你就会看到上面运行后最后一句“NameError: name ‘mymodule’ is not defined”的错误提示啦!

下面再深入说一下吧,其实呢,你在导入模块之后,就可以在模块文件所在滴目录下看一个名字为“__pycache__”的文件夹,打开这个文件夹,就可以看到Python为每个模块都生成了一个*.cpython-38.pyc文件哦,当然啦名字中的“38”和你电脑上装的Python解释器的版本有关哦,俺滴电脑上装的是Python 3.8版本,所以显示“38”啦,好尴尬哈,比如上面咱们写的模块是mymodule,所以呀,它生成的文件名就是“mymodule.cpython-38.pyc”,不信就看下图啦:

那到这可能有朋友问了:这个文件有毛用呢?它还真有一点“毛”用,这也是Python的聪明之处,Python自己知道自己是解释型语言,运行性能没有优势,所以呀,这个文件其实就是Python为模块编译生成滴字节码哦,这个可是有用滴,它可以提升这个模块的运行效率哦!

可能有朋友对它好奇,那咱们就打开瞧一瞧吧,打开如下哦:

看到什么啦?是不是一堆乱码,没关系啦,不用分析,只知道它是用来干啥滴,有什么用就可以啦,里面到底是些什么东东,没啥用哦!

好啦,今天咱们就聊到这吧,相信大家看到这,已经对Python模块导入的“真相”有所深入了解啦,俺也相信你已经抓住它滴“精髓”啦,下次再见哦![再见]


敬请关注“品位集结号”,为您带来意外的小收获![比心][握手][比心]

code block怎样导入整个文件夹_一文就能get!带你了解Python模块导入的真相,拿走不谢...相关推荐

  1. code block怎样导入整个文件夹_手机资讯:【爱思助手6.0】视频导入教程

    如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多知识的,这些知识很多小伙伴一般都是不知道的,就好比最近就有很多小伙伴们想要知道[爱思助手]视频导入教程,那么既然现在大家对于[爱 ...

  2. code block怎样导入整个文件夹_按需分配随时可用的在线开发环境:弹性容器+code-server踩坑记...

    需求整理 微软在19年的build大会上公开了Visual Studio Online,相当于把Visual Studio Code和我们需要的开发相关文件装进了浏览器,随时访问.不过目前的公共预览版 ...

  3. code block怎样导入整个文件夹_利用ArcGis导入数据之四(dxf——Geomap、CAD、CorelDraw)...

    利用ArcGis导入数据之四(dxf--Geomap.CAD.CorelDraw) 一.应用目标 在油气行业,地质方面Geomap应用相当广泛,建设方面也有CAD,作图方面CorelDraw应用也多, ...

  4. code block怎样导入整个文件夹_怎样制作音乐相册?多种风格的背景音乐任你挑...

    以前的相册,是一张一张静态的相册,而现在的相册,却是可以"动起来"的吧!一想到这种充满黑科技的相册,你是不是觉得就是那些专业人士制作出来的呢?实际上,要制作这样的电子相册还真不需要 ...

  5. hdfs复制文件夹_一文理解HDFS

    一.架构原理 HDFS 是Hadoop Distributed File System的简称,是HADOOP抽象文件系统的一种实现.Hadoop抽象文件系统可以与本地系统.Amazon S3等集成,甚 ...

  6. python导入同一文件夹下的类_Python模块导入机制与规范

    前言 在我们平常工程里使用Python的过程中,经常需要解决各个模块的导入问题,而且也常常遇到引用路径查找不到.交叉导入模块等等问题,故写这篇文章,旨在讲述Python的模块导入机制和我们平时大型项 ...

  7. 解决python导入当前文件夹下的包时可以运行,但编辑器报错

    比如导入当前文件夹下的config.py文件,使用: form ..config import xxx 其中..表示当前文件夹,在写代码时直接:from config import xx是不会报错的, ...

  8. 如何批量导入不同文件夹中的图片

    在标签设计印刷工作中,批量导入图片已经是非常普遍的功能了.不论图片名称是否有规律或者是否有在数据库中保存,经过一些专业的设置都可以实现批量导入.那么如果是不同文件夹中的图片该如何导入呢? 文件夹中图片 ...

  9. 自动导入指定文件夹内的文献到 Endnote 中

    简介 最近正着手写一篇综述文章,来整体把握下自己研究领域的历史.方法.最新进展与趋势.由于需要对相关文献进行搜集.阅读和分类.庄小编使用 EndNote 来进行管理文献. 在使用较长时间后,整理了几个 ...

最新文章

  1. php 中国标准时间,linux 系统时间与硬件时间与中国标准时间
  2. 没有bug队——加贝——Python 练习实例 11,12
  3. Ubuntu / Debian / Deepin等 Sublime Text 3 配置C++环境(一键编译运行,格式化代码)
  4. python经纬度获取县名_利用 Python 批量获取县镇运输距离
  5. 两个或多个线程执行完成之后继续执行之后的步骤,CountDownLatch与CyclicBarrier
  6. 计算机无法进系统咋办,主编教您电脑无法进入系统怎么办
  7. Oracle Linux 6下安装Oracle 12C实战
  8. SpringMvc定时器任务
  9. java二维码生成器
  10. 下载安装php详细教程(在安装配置apache之后)
  11. java超类_Java——超类和子类对象之间的转换
  12. 上上下下左右左右BA
  13. 解决Microsoft Edge与Chrome地址栏使用必应搜索bing.com很慢的问题
  14. 6.6 在图表上显示最大值和最小值 [原创Excel教程]
  15. ITSM-CMDB数据库设计-四种方案任你选
  16. 织梦主动提交_织梦发布文章主动推送(实时)给百度的方法
  17. 如何将各大网盘整合到一起顺便挂载本地使用(文末附软件获取方式)
  18. 传拼多多将上线“多多国际” 回应:该业务早就存在
  19. 气象绘图软件Panoply使用教程 (不定时更新)
  20. 【ES6】阮一峰ES6学习之Promise(一)

热门文章

  1. 很现实、很暴力的面试法则 —— 来自招聘官的自述
  2. Kafka分区分配策略(4)——分配的实施
  3. Java判断类和实例的关系
  4. 音视频技术开发周刊 | 169
  5. 腾讯云首次公开边缘计算网络开源平台,拥抱5G与万物互联
  6. FFmpeg源代码:avcodec_open2()
  7. gitlab project项目迁移
  8. 在Linux系统的命令行中为MySQL创建用户的方法
  9. VT-x/AMD-V 硬件加速器已被启动,但当前处于无效状态
  10. 解决gradle下载慢的问题