python运行原理

1.运行过程

python源程序运行时,不是直接交给机器去运行的,而是先交给python虚拟机(通过C语言实现的),然后由python虚拟机解释成机器可识别的指令去运行;   ——所以python是一种解释型语言或动态语言

2..pyc文件的作用

.pyc文件是python源程序在同python虚拟机交互时产生的python虚拟机可识别的字节码文件,然后python虚拟机再将其解释成机器可识别的指令;      ——.pyc文件是python源码转为的python虚拟机可识别的字节码文件

3.为什么直接运行python程序没有看到.pyc文件,而导入模块就能看到生成的.pyc文件呢?

这里涉及到一个缓存机制,直接运行python程序其实也会生成.pyc文件,只是没有保存,python虚拟机将直接运行的程序视为长期运行的程序,不需要频繁调用,而导入模块,则视为会频繁调用;所以导入模块时,会生成.pyc文件,如此下次再导入该模块时,会先查看是否有.pyc文件,如果有,则直接导入.pyc文件;如果没有,则将模块转码成字节码文件pyc,后再导入字节码文件。这里会涉及到模块修改的问题,如果模块有修改,虚拟机会自动检测模块程序的修改时间,如果与修改则重新生成字节码文件。

时间: 2024-09-28 08:28:43

python运行原理的相关文章

可对Python运行原理进行可视化分析的工具

Python Tutor Python Tutor是一个对Python运行原理进行可视化分析的工具,网址为: http://www.pythontutor.com 使用范例 参考链接 原文地址:https://www.cnblogs.com/jiangling500/p/8353607.html

Python逆向(一)—— Python运行原理

一.什么是Python Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言. 二.解释型语言和编译型语言的区别 我们编程都是用的高级语言,计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级语言所编写的程序.翻译的方式有两种,一个是编译,一个是解释. 用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统(不仅仅只是通过编译器,编译器只是编译系统的一部分)把高级语言翻译成机器语言(具体翻译过程可以参看下图),把源

常见的几种语言C,C#,JAVA,Python的运行原理

相对于常见的几种语言C,C#,JAVA,Python的运行原理 由于CPU只能识别机器码,即我们常说的二进制码01010101 有任何语言在计算机上运行最终都要转化成CPU能够识别的机器码010101 对于C语言:通过C语言代码编译器将C语言写出的代码进行编译得到机器码,然后机器码就可以交给CPU去识别,即运行 对于其他语言:代码编译器将代码编译成字节码,然后通过各自的虚拟机将字节码进一步处理(转换)成机器码(0101010101),然后在处理器上运行 Python和C 首先Python是用C开

Python学习笔记——进阶篇【第八周】———CPU运行原理与多线程

CPU运行原理与多线程 什么是线程(thread)? 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务 进程是容器,线程是真正执行的任务单元

为什么python运行的慢

最近在leetcode刷题,明显的注意到同样的算法,python运行的要慢的多,查资料得到python运行的慢主要原因如下: 一.动态类型导致运行速度慢,在北邮人论坛里面的这篇帖子中有较为详细的解释,原文中有举例说明,本文没有例子讲解只是提取了原理来讲解,内容主要如下: (原文链接:http://bbs.byr.cn/#!article/Python/68) a.动态语言中的执行过程 Python等动态类型语言之所以慢,就是因为每一个简单的操作都需要大量的指令才能完成.他们的虚拟机拥有很强的优化

python运行代码出现'ascii' codec can't decode byte 0xb4 in position 11: ordinal not in range(128)

学习机器学习时出现的问题,百度了半天也没弄好,但知道了大概的原因 原因如下:因为默认情况下,Python采用的是ascii编码方式,而Python在进行编码方式之间的转换时,会将 unicode 作为"中间编码",但 unicode 最大只有 128 那么长,所以这里当尝试将 ascii 编码字符串转换成"中间编码" unicode 时由于超出了其范围,就报出了如上错误. 既然知道了原因,那就好解决了不是 解决方法如下: 1.修改默认编码格式: 例如# encodi

使用virtualenv为应用提供了隔离的Python运行环境

在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. 如果我们要同时开发多个应用程序,那这些应用程序都会共用一个Python,就是安装在系统的Python 3.如果应用A需要jinja 2.7,而应用B需要jinja 2.6怎么办? 这种情况下,每个应用可能需要各自拥有一套"独立"的Python运行环境.virtualenv就是用来为一个应用创建一套"隔离"

(转)Apache和Nginx运行原理解析

Apache和Nginx运行原理解析 原文:https://www.server110.com/nginx/201402/6543.html Web服务器 Web服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务. 应用层使用HTTP协议. HTML文档格式. 浏览器统一资源定位器(URL). Web服务器常常以B/S(Browser/Server)方式提供服务.浏览器和服务器的交互方式如下: GET /index.php HTTP/1.1 +-------

Python多线程原理与实现

Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本概念 1.1 线程是什么? 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1) 地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2) 资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3)