python 模块 包 库_模块(包、库)
模块的基本概念:
模块是程序,它就是一个扩展名为.py的python程序。因此对于一个.py的python文件而言,既可以把它当作程序来执行,也可以将它作为模块引入。
导入一个模块时,python解释器会先自动在当前路径下搜索要导入的模块,如果没有找到,则会自动到python标准模块安装路径(python默认自带的)中搜索,如果还没找到,则报错ModuleNotFoundError。
在sys模块的path属性中,可以看到python自动导入的所有路径(以列表的形式存放)。sys的path属性中除了本来就有的python系统自带的标准模块的路径之外,还会将当前执行文件的路径临时的加到path属性中。所以,python解释器可以在当前路径中找模块,事实上跟同级路径的概念并没有关系,而是python解释器将执行文件的所在路径临时的加到了path属性中,且放在了第一个位置。
除了python可以自动寻找的路径之外,我们还可以指定路径,并将路径告诉python解释器。因此对于我们自己写的文件,要想可以作为模块被导入,有三种方法:
将模块写在当前目录中,python会直接自动找到;
将模块发布并安装到python标准模块安装的路径中,python也可以自动找到;
将我们自己写的模块路径append到sys模块的path属性列表中,即告诉python解释器,我们自定义的模块的路径位置。
执行了.py文件后,会发现目录中多了一个__pycache__的目录,这个目录中存放着执行.py文件后生成的文件中的import导入的模块的编译文件,下次再执行该文件时,遇到import导入的相同模块时,将直接执行此编译文件,不再重新编译相同的模块,节省执行时间。
__all__在模块中的作用:
当使用“ from 模块名 import * ”的方式从模块中导入所有内容时,模块中以_或着__开头的私有属性、函数或者类将不会被导入,因为以这种方式导入模块中的内容时,导入的将是模块中__all__属性中的内容。在默认情况下,私有属性、函数或者类是不会被放到__all__属性中的。当然我们可以自定义模块的__all__属性中的内容,让模块中的哪些属性、函数或者类(包括私有的)可以被导入。
如果是通过“ import 模块名 ”的方式导入模块,则可以用“ 模块名. ”的方式来访问模块中的所有属性、函数和类(包括私有的)。因为只有通过“ from 模块名 import * ”的方式才会导入模块中__all__中的内容。
模块中还有一个__file__属性,它可以告诉我们此模块的位置(路径)。
当一个.py文件作为模块被导入时,实际上会执行一次该文件。我们导入模块时,只是想要模块中的类、函数或者变量等,而并不是要真正的去执行该文件。所以在文件中,被执行的代码或者要调试的代码,应写在if __name__ == ‘__main__’:中。当文件作为模块导入时,则不会执行if __name__ == ‘__main__’中的内容;当文件作为.py文件执行或者调试时,就会执行if __name__ == ‘__main__’中的内容。因为文件作为模块导入的时候被执行时,__name__得到的是文件名路径的字符串;直接作为.py文件执行时,__name__得到的时’__main__’字符串。
包和库:
python标准库中包含多个包,每个包中又有多个模块,包即是目录(文件夹),用来存放模块。当要引用某个包中的模块时,需要在该包中放一个__init__.py文件。__init__.py可以只是一个空文件,将它放在某个目录中,就可以使得该目录中的其它.py文件能够作为模块被引用。
注意,每一个包中的__init__.py文件是必须存在的,否则,Python就会把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字。调用包就是执行包中的__init__.py文件。
python 模块 包 库_模块(包、库)相关推荐
- python动态图表变化_用 Matplotlib 库生成动画图表
更多文章请关注微信公众号:硬核智能 动画是一种展示现象的有趣方式.相对于静态图表,人类总是容易被动画和交互式图表所吸引.在描述多年来的股票价格.过去十年的气候变化.季节性和趋势等时间序列数据时,动画更 ...
- python爬虫好友图片_用itchat库爬取你所有微信好友的头像,并合成一张大图
几年前,我们给爸妈手机上下载了一款神奇的软件,他的名字叫微信.几年后,爸妈就开始吐槽我们的微信头像了. 爸妈对我们微信头像的关注程度远胜过我们的衣食住行,我在新浪微博上看到了这张统计图. 图片来源:新 ...
- python心跳包原理_心跳包机制设计详解 转载
存在下面两种情形: 情形一:一个客户端连接服务器以后,如果长期没有和服务器有数据来往,可能会被防火墙程序关闭连接,有时候我们并不想要被关闭连接.例如,对于一个即时通讯软件,如果服务器没有消息时,我们确 ...
- solidworks电气元件3d库_丨部件库丨西门子3RT60交流接触器
部件库 西门子3RT60交流接触器 编辑丨钻石海 出品丨电气CAD论坛 本次发布的西门子SIRIUS(国产)3RT60系列交流接触器包含AC380V.AC220V和辅助触点.包含2D/3D宏.连接点排 ...
- iphone7wifi模块多少钱_模块炉价格参差不齐,消费者应独具慧眼!
前几篇文章小编就有提到:"模块炉是什么?不是所有蒸汽锅炉都叫模块炉!"如果你们都了解这个问题,相信就不会单凭模块炉的价格来选购模块炉设备了.这里简单重复下,真正的模块炉是应该能做到 ...
- python3.8安装pyinstaller库_模块:pyinstaller库的安装与使用
PyInstaller库的安装 (cmd命令行) pip install pyinstaller 如果安装失败 python 3.8 不兼容. 解决方案:安装和使用pyinstaller 4.0 de ...
- python的数学建模库_数学建模库
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 引用: import numpy as ...
- python和verilog对接_用这个库居然可以使用Python进行FPGA逻辑开发
未经私信同意禁止转载! 不好意思,又标题党了,为了骗阅读量没办法... 前言 今天为大家介绍一下python的MyHDL 库.MyHDL项目的目标是通过python语言的优雅和简洁性来增强硬件设计者的 ...
- python路线寻优_基于DEAP库的Python进化算法从入门到入土 --(四)遗传算法的改进...
前言 前面一节我们尝试了用GA求解TSP问题,简单遗传算法总是不能很好收敛到一个较优的解,在用时和求解精度上都被贪心算法吊打.在末尾我们总结了三个可能的改进方向,这次我们想要沿着这三个方向试着改进简单 ...
最新文章
- 溢价 5 倍欲将 SiFive 收入麾下,英特尔的绝地反击战
- python的api库_python 利用toapi库自动生成api
- mseloss pytorch_PyTorch 卷积与BatchNorm的融合
- sqlserver中select造成死锁
- 杭电2502--月之数
- 如何启用nodejs request模块的调试模式
- hapi 获取 请求地址 url
- 【转】LDA数学八卦
- MySQL内核月报 2015.02-MySQL · 答疑释惑· InnoDB丢失自增值
- C语言中,int、char、float、double各占多少字节
- 嵌入式用HTTP请求下载bin文件
- 1212_MISRA_C规范学习笔记_控制表达式规则要求
- 麒麟操作系统安装达梦数据库实战
- 图像处理常用函数(Matlab)
- D. Good Triple
- 蓝牙音响加拿大IC认证知多少
- PS实用小技巧--修改图片上的文字
- html京东自动轮播,js 京东首页轮播图实现(透明度切换)
- C++面向对象程序设计:地铁自动售票系统
- JQuery中 JSON 兼容性问题(针对ie8)
热门文章
- (转)关于X64位系统IIS7下支持32位asp.net程序
- SQL Server 2005 高级程序设计 学习笔记(2)
- 宁波政务云资源的介绍与申请
- python创建数组与列表_python基础(三):数组和列表
- php打印布尔型,PHP数据类型之布尔型的介绍_PHP
- transformer论文解读_【论文解读】ICLR2020 | 深度自适应Transformer
- java isempty_Java ArrayDeque isEmpty()方法与示例
- openssl java aes_请问如何使用AES对使用OpenSSL命令加密的Java文件进行解密?
- ensp路由器无法启动_品胜云路由器Breed刷入详细教程,技巧和注意事项,功能大增...
- csv导入mysql phpmyadmin_【转】从phpMyAdmin批量导入Excel内容到MySQL(亲测非常简洁有效)...