python3导入模块原理_python模块导入原理
转自:http://blog.csdn.net/u012422440/article/details/41791433
今日在自学Python,借此机会,正好重新开始写博文,既可以巩固python的知识,也可顺便提高一下文笔。
一、python模块基础
言归正传,Python的模块是python语言中代码复用的最高级别,也是系统命名空间的的划分标准,也是供顶层文件(就是包含程序主要控制流程的部分)调用的工具库文件。实现模型其实很简单,任何一个python文件都可以当做模型通过import进行导入。而python的import与c或者c++的include的原理并不相同,举个例子就是:
a.py:
message="test"
def printer():
print("test")
b.py:
import a
a.printer()
通过import 就是可以让b.py文件的顶层可以通过变量名b来获得所有的b.py在顶层定义的所有对象,比如message,printer。
二、import工作原理
之前提到python的import并不等同与c或者c++的include,因为import并不是把一个文件文本直接插入到另外一个文件中而已,在编译时进行;import其实是运行时的运算。
在程序第一次导入指定文件时,会执行三个步骤:
1.找到模块文件。
注意两点,1 导入时不需要加上文件的路径 2 导入时不需要加上文件的后缀名。
模块搜索路径:
*程序主目录
*PYTHONPATH目录
*标准链接库目录
*.pth文件目录
前三个估计大家都很了解,第四个是指python运行用户把有效的路径添加到模块搜索路径中去,也就是在.pth文件中一行一行的列出来。
2.编译成字节码(如果必要时)。
如果导入的文件并没有被编译成字节码,python会将起进行解释,如果已经存在.pyc的文件,python会检查字节码的时间戳,如果比源码的时间戳旧,程序运行时便会从新编译成为新的字节码,否则跳过编译过程。
3.执行模块的代码来创建其所定义的对象。
程序会讲导入的文件从头到尾执行一遍,在此过程中任何对变量名进行的赋值操作,都会产生得到的模块文件的属性,但是要注意这些对变量名的赋值操作必须是在模块文件的顶层进行的操作,例如使用def语句来定义函数,模块文件中便会添加这个定义的函数属性。
三、import,from,reload
import使一个变量名引用整个模块对象,我们可以通过模块名来得到或者使用该模块的属性;而from语句是将变量名复制到另一个作用域,我们可以在脚本重直接使用复制后的变量名。
需要注意的问题是导入只会发生一次,当第二次导入时,程序不会执行import工作原理中的三个步骤,而是从python内部模块表中取出已经创建的模块对象。
reload则可以从新导入模块,实现在不中断程序的前提下,重新执行import工作原理中所说的三个步骤,导入模块。reload会在模块当前的命名空间内执行模块文件的新的代码,让导入模块文件重顶层语句执行来对变量名进行从新赋值。reload会影响所有的import语句,而只会对之后使用的from语句有影响,也就是说,对于在reload之前使用from语句复制获得变量是不受reload影响的。
python3导入模块原理_python模块导入原理相关推荐
- python3导入模块原理_Python模块导入机制与规范
前言 在我们平常工程里使用Python的过程中,经常需要解决各个模块的导入问题,而且也常常遇到引用路径查找不到.交叉导入模块等等问题,故写这篇文章,旨在讲述Python的模块导入机制和我们平时大型项 ...
- py文件 添加模块映射_Python模块的定义,模块的导入,__name__用法实例分析
本文实例讲述了Python模块的定义,模块的导入,__name__用法.分享给大家供大家参考,具体如下: 相关内容: 什么是模块 模块的导入 模块的导入 自模块的导入 同级目录导入 不同级目录导入 目 ...
- python导入模块语句_python 模块导入详解
本文不讨论 Python 的导入机制(底层实现细节),仅讨论模块与包,以及导入语句相关的概念.通常,导入模块都是使用如下语句: import...import... as ...from ... im ...
- python模块讲解_python模块详解
使用python时,常常会涉及到库的调用,这就需要掌握模块的基本知识. 本文分为如下几个部分概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝 ...
- python模块手册_python模块说明
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能, ...
- python所有模块图解_Python模块结构和布局
用模块来合理组织你的Python代码是简单又自然的方法.你应该建立一种统一且容易阅读的结构,并将它应用到每一个文件中去.下面就是一种非常合理的布局: (1) 起始行(Unix) (2) 模块文档 (3 ...
- python模块使用_PYthon模块使用教程(最新).doc
您所在位置:网站首页 > 海量文档  > 计算机 > Python PYthon模块使用教程(最新).doc63页 本 ...
- python自带模块连接数据库_Python模块Sqlite数据库模块
Python模块Sqlite数据库模块简介 从Python2.5以后的版本开始引入SQLite,属于Python内置模块,不需要额外安装.Sqlite以小巧快捷著称.SQLite第一个Alpha版本诞 ...
- python查看模块功能_Python模块Os系统功能
Os模块简介系统功能 python编程时,经常和文件.目录打交道,这是就离不了os模块.os模块包含普遍的操作系统功能,与具体的平台无关. OS模块使用实例 执行dos命令 Python os.sys ...
最新文章
- JAVA学习笔记--数组初始化
- Windows下创建PXE网络安装Linux[Redhat AS5.5]IBM X3650
- 【大牛系列教学】java商城推荐算法
- 门户网站建设与运营需要付出更多成本
- 会员系统整合的想法[择]
- PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)
- RuoYi-Cloud 部署篇_02(windows环境 Oracle +nginx版本)
- VS2010与.NET4系列 16.ASP.NET 4 Web Forms 更加干净的HTML标记
- mysql where过滤
- Xilinx 7系列FPGA DDR3硬件设计规则
- img标签居中显示图片内容
- pytorch 基本数学运算
- 大型企业开发的ERP系统主要包括几个模块
- 经典动漫秒变高清,需要怎么做?
- 《用图表说话》读后感
- udev源码开源下载地址分享
- 19n20c的参数_常用场效应管参数
- html量子效果,HTML5 量子谐振子动画模拟
- 数字图像学笔记——14. 图像退化与复原(线性退化)
- 【Shotcut】画中画_调整大小位置