欢迎访问wabc.cc — 源码交易 · 软件定制 · 建站服务一站式平台
全部分类
首页 - 首页 - 解决方案 - 推荐文章 - Python程序运行原理(广州中软卓越)

Python程序运行原理(广州中软卓越)

分类:推荐文章 · 发布:2025-12-20 · 浏览:1

今天中软卓越广州Python培训课程和大家来讲讲Python程序运行原理。

默认标题_手机海报_2018.06.14 (1).jpg

一、模块的内建__name__属性,主模块其值为__main__,导入模块其值为模块名

1、创建时间,py文件比pyc文件新,则从新生成pyc。

2、magic num,做运行前版本测试,版本不同重新生成pyc。

3、PyCodeObject对象,源代码中的字符串,常量值,字节码指令,原始代码行号的对应关系。

二、LEGB规则

1、Local:本地

当前所在命名空间(如函数,模块),函数的参数也属于命名空间内的变量。

2、Ecolsing functio:外部嵌套函数的命名空间

外部嵌套函数的命名空间(闭包中常见)。

3、Global:全局

全局变量,函数定义所在模块的命名空间。

4、Builtins:内建模块命名空间

① Python 在启动的时候会自动为我们载入很多内建的函数、类, 比如dict,list,type,print,这些都位于__builtins__模块中,可以使用dir(__builtins__)来查看。

② 在Python中,有一个内建模块,该模块中有一些常用函数;在Python启动后,且没有执行程序员所写的任何代码前,Python会首先加载该内建函数到内存。另外,该内建模块中的功能可以直接使用,不用在其前添加内建模块前缀,其原因是对函数、变量、类等标识符的查找是按LEGB法则,其中B即代表内建模块。

三、dir函数

Python的内置函数dir可以用来查看一个命名空间下的所有名字符号。一个用处是查看一个命名空间的所有属性和方法(这里的命名空间就是指类、函数、module)。

四、垃圾回收

1、小整数对象池:

① 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间。

② Python对小整数的定义是 [-5, 257) 这些整数对象是提前建立好的,不会被垃圾回收。在一个Python的程序中,所有位于这个范围内的整数使用的都是同一个对象。

2、大整数对象池:每一个大整数,均创建一个新的对象。

3、intern机制:python中有这样一个机制——intern机制,让他只占用一个“HelloWorld”所占的内存空间。靠引用计数去维护何时释放。

五、小结

1、小整数[-5,257)共用对象,常驻内存。

2、单个字符共用对象,常驻内存。

3、单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁。

4、字符串(含有空格),不可修改,没开启intern机制,不共用对象,引用计数为0,销毁 。

5、大整数不共用内存,引用计数为0,销毁 。

6、注:数值类型和字符串类型在Python中都是不可变的,这意味着你无法修改这个对象的值,每次对变量的修改,实际上是创建一个新的对象。

六、def指令

1、def func(),在字节码指令中就是MAKE_FUNCTION。Python是动态语言,def实际上是执行一条指令,用来创建函数(class则是创建类的指令),而不仅仅是个语法关键字。 函数并不是事先创建好的,而是执行到的时候才创建的。

2、def func()将会创建一个名称为func的函数对象。 实际上是先创建一个函数对象,然后将func这个名称符号绑定到这个函数上。

七、import导入包时进行搜索路径:

1、路径搜索:

import sys

sys.path:查看导入包路径

2、程序执行时导入模块路径

sys.path.append('/home/usr/local/images')

sys.path.insert(0,'/home/usr/local/image')

3、设置linux下导入模块路径

echo $pythonpath

export pythonpath=$pythonpath:'/home/usr/local/image'

4、如果程序已经引用了模块,但是模块被修改。需要重新导入模块:

可使用reload(module)进行,类似于情况缓存后进行import操作

八、pyc文件

1、概念:pyc文件是PyCodeObject对象在硬盘上的表现形式。生成pyc文:

2、pyc文件三大作用

① 创建时间,py文件比pyc文件新,则从新生成pyc文件

② magic num做运行前版本检测,版本不同从新生产pyc

③ PyCodeObject对象

④ 在运行期间,编译结果也就是PyCodeObject对象,只会存在于内存中,而当这个模块的Python代码执行完后,就会将编译结果保存到了pyc文件中,这样下次就不用编译,直接加载到内存中。

⑤ 这个PyCodeObject对象包含了Python源代码中的字符串,常量值,以及通过语法解析后编译生成的字节码指令。PyCodeObject对象还会存储这些字节码指令与原始代码行号的对应关系,这样当出现异常时,就能指明位于哪一行的代码。

九、import指令

1、import指令是用来载入module的,如果需要,也会顺道做编译的事。但import指令,还会做一件重要的事情就是把import的那个module的代码执行一遍,这件事情很重要。 Python是解释执行的,连函数都是执行的时候才创建的。如果不把那个module的代码执行一遍,那么module里面的函数都没法创建,更别提去调用这些函数了。

2、执行代码的另外一个重要作用,就是在这个module的命名空间中,创建模块内定义的函数和各种对象的符号名称(也就是变量名),并将其绑定到对象上,这样其他module才能通过变量名来引用这些对象。

3、Python虚拟机还会将已经import过的module缓存起来,放到一个全局module集合 sys.modules中。这样做有一个好处,即如果程序的在另一个地方再次import这个模块,Python 虚拟机只需要将全局 module 集合中缓存的那个module对象返回即可。

关于Python程序运行原理已经讲解完毕了。去企业,学习企业需要的编程技能!广州中软卓越Python培训,真实企业背景,送你企业入场券!

广州中软卓越课程:http://gzetc.com.cn/

上一篇:国庆都不去旅游了么?餐饮、零售行业消费1.4万亿!
下一篇:集合微店商城分销系统模式介绍

相关文章

源码分类

热门源码

最新资讯

联系我们