编程必修课:一文弄懂python的运行机制


Python的维基百科说明:“是一种广泛使用的解释型,高级编程,通用型语言,具有 动态类型和垃圾回收功能,能够自动管理内存使用
在这里插入图片描述

Python的设计哲学:

  • 优美优于丑陋,明了优于隐晦
  • 简单优于复杂,复杂优于凌乱
  • 扁平优于嵌套,稀疏优于稠密
  • 可读性很重要

【1】背景知识

【1.1】编译型VS解释型

首先Python是一门解释型语言(虽然有编译过程)

程序开发者编写的代码是高级语言,计算机是看不懂的,故需要一个“翻译官”将我们写的代码转换成计算机可以看明白的,这个“翻译”的过程有2中——编译和解释

  • 编译型语言先编译,再运行,在程序运行之前,先通过编译器将代码转化成机器码,然后再交给计算机运行——典型代表C语言
  • 解释型语言边解释边运行,程序直接开始运行,解释器逐行给计算机进行解释,接着直接运行

【1.2】字节码

字节码并不是机器码,而是可由解释器执行的低级指令集合


【2】Python运行机制

Python的运行其实也需要编译这一步,编译成字节码,但大多数情况下Python是一门解释型语言。

运行python程序(.py文件)时,我们会发现生成了一种.pyc文件,.pyc文件中存储着python程序编译后的字节码

python运行机制: 首先将.py文件编译成字节码,存储在.pyc文件中(该字节码在虚拟机上运行非cpu)。当python程序第二次运行时,首先程序会在硬盘中寻找.pyc文件,如果找到直接运行,否则重复上述过程。

由于引入了字节码,其加载速度比之前的.py文件有所提高,而且还可以实现源码隐藏,一定程度上可以反编译


【3】解释型语言优点

  • 解释型语言具有独立于平台的一大优势:只要Python字节码和虚拟机版本一致,就可以在任何平台上运行
  • python是动态语言:在c++等静态语言中,必须先声明变量类型,并在编译的时候检查所有的差异,而Python作为弱类型语言,检查变量类型和执行操作的有效性由解释器完成,故Python不用先声明变量。

【4】解释型语言的缺点

  • 动态类型提高了代码的自由度,但同时也提高了代码的风险,有时也难以调优
  • python经常被指责“速度慢”,因为每一次解释字节码需要许多额外工作

【5】垃圾回收

内存空间有限,需要不断的将这些垃圾回收,早期的编程语言,内存的分配主要依靠手动操作,现在都采用垃圾回收站代替人工进行。

垃圾回收: 不再使用的变量要从内存中移除或移动到别的地方

内存管理的方式:

  • 简化方式: 利用 “引用次数”,跟踪变量的引用次数,当次数下降到0,则删除对象(python中无法禁用此功能)
  • 利用“生成垃圾回收”线程方法:当对象引用自己或者两个对象相互引用时则无法使用“引用次数”

【6】__pycache__文件夹

__pycache__文件夹下保存着 .pyc/.pyo 文件

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值