首页 > 编程语言 >python相关知识

python相关知识

时间:2024-02-18 17:56:18浏览次数:36  
标签:解释器 co 字节 python 知识 PyObject Python 相关

1 python原理

Python先把代码编译成字节码,交给虚拟机执行。

.pyc文件是字节码在磁盘上的表现形式

字节码在虚拟机程序里面对应的对象是PyCodeObject对象(C++对象)

PyCodeObject

typedef struct {
PyObject_HEAD
int co_argcount;        /* 位置参数个数 */
int co_nlocals;         /* 局部变量个数 */
int co_stacksize;       /* 栈大小 */
int co_flags;
PyObject *co_code;      /* 字节码指令序列 */
PyObject *co_consts;    /* 所有常量集合 */
PyObject *co_names;     /* 所有符号名称集合 */
PyObject *co_varnames;  /* 局部变量名称集合 */
PyObject *co_freevars;  /* 闭包用的的变量名集合 */
PyObject *co_cellvars;  /* 内部嵌套函数引用的变量名集合 */
/* The rest doesn’t count for hash/cmp */
PyObject *co_filename;  /* 代码所在文件名 */
PyObject *co_name;      /* 模块名|函数名|类名 */
int co_firstlineno;     /* 代码块在文件中的起始行号 */
PyObject *co_lnotab;    /* 字节码指令和行号的对应关系 */
void *co_zombieframe;   /* for optimization only (see frameobject.c) */
} PyCodeObject;

pyc和PyCodeObject

python运行之前首先进行编译,编译的结果是在内存中的PyCodeObject对象。当程序结束运行,内存中的PyCodeObject对象被持久化到.pyc文件中。当第二次运行时,首先运行pyc文件,如果pyc文件不存在才会再进行编译,重复刚开始的情形。
简单说,.pyc文件就是PyCodeObject的持久化存储。

2 python脚本的执行过程

启动解释器
当你在命令行中输入python xxx.py时,操作系统会启动Python解释器。
编译代码
Python解释器首先将脚本中的源代码(文本)编译成字节码。如果Python脚本之前已经被编译过,并且源代码没有变化,解释器可能会直接加载.pyc文件中的字节码,以加快启动速度。
执行字节码
编译得到的字节码随后被送到Python虚拟机(PVM)执行。
结束执行
当脚本执行完毕,或者遇到系统退出命令(如sys.exit()),Python解释器会结束当前脚本的执行。在这个过程中,解释器会进行清理工作,如关闭打开的文件、清理内存等。
返回结果
脚本执行完成后,会返回一个退出状态码给操作系统。通常情况下,如果脚本成功执行,返回的状态码为0;如果执行过程中遇到错误,返回非0状态码。

整个过程是由Python解释器自动管理的,用户只需要关注脚本的编写和执行命令即可。这种执行机制使得Python代码具有很好的跨平台性,因为同一份脚本在不同的操作系统上,只要有相应的Python解释器,就可以以相同的方式运行。

Python解释器可以以两种模式运行:
交互模式:当你在命令行中直接运行python命令时,没有指定文件,它会进入一个交互式会话。在这个模式下,你可以逐行输入Python代码,解释器会立即执行这些代码并显示结果。这种模式非常适合学习和实验。
脚本模式:如果你在python命令后面指定了一个.py文件,解释器会执行该文件中的Python代码。例如,如果你有一个名为script.py的文件,你可以通过在命令行中输入python script.py来运行它。

 

标签:解释器,co,字节,python,知识,PyObject,Python,相关
From: https://www.cnblogs.com/zhenjingcool/p/18019713

相关文章

  • NewStarCTF 2023 WEEK2|REVERSE SMC 使用IDApython静态解决SMC
    先来一篇IDApyhotn的指令教程https://www.cnblogs.com/zydt10/p/17676018.html*自己编的这题对应的expa=[0x11,0x22,0x33,0x44]foriinrange(38):result=a[i&3]ida_bytes.patch_byte(0x403040+i,get_wide_byte(0x403040+i)^result)在IDA中运行完exp之后,......
  • 用python脚本自动发送钉钉消息出现服务器异常的报错: HTTPSConnectionPool(host='oapi.
    一、问题描述执行python脚本发送钉钉消息,出现报错:HTTPSConnectionPool(host='oapi.dingtalk.com',port=443):Maxretriesexceededwithurl:/robot/send?access_token=43df999582e899dc6815c9d6346c9d253060259625c92e4f166e25ea58e5bdb5&timestamp=1708242748918&sign......
  • 多线程系列(一) -线程技术入门知识讲解
    一、简介在很多场景下,我们经常听到采用多线程编程,能显著的提升程序的执行效率。例如执行大批量数据的插入操作,采用单线程编程进行插入可能需要30分钟,采用多线程编程进行插入可能只需要5分钟就够了。既然多线程编程技术如此厉害,那什么是多线程呢?在介绍多线程之前,我们还得先......
  • python 日期时间学习
    importdatetimeimporttimefromdatetimeimporttimedeltaclassTimeUtil:"""staticmethod:静态方法,参数没有要求,和类没有绑定关系,跟全局变量差不多classmethod:类方法,是一个函数修饰符,第一个参数是cls"""@staticmethoddefget_current_yea......
  • [python] 内置函数: zip()
    zip()作用将复数个可循环类型(iterables)中的元素组装为一组tuple;组装规则是根据各自所在的位置决定;当最短的可循环类型内已经没有元素的时候,组装终止传入参数以及返回类型参数是可循环的数据类型,例如数组,元组,字符串等返回类型是搭载复数元组的某种可循环类型......
  • 23-06知识积累
    序号知识点描述 分析频繁FGC问题 堆内存使用过高:https://buzkgep88z.feishu.cn/docx/IW2YdwtOAoGKSDxbgoKcmsH5nvhmat使用说明:JVM系列之:MAT工具使用教程-掘金(juejin.cn)使用教程:(43封私信/80条消息)结合MAT分析OOM问题(视频版)-知乎(zhihu.com)......
  • C#调用python开发的方法
    一、可以通过使用IronPython库来实现,首先需要安装IronPythonNuGet包,然后导入相关命名空间。接下来,我们创建了一个Python运行时引擎对象,并使用该引擎加载并编译指定路径下的Python文件(也可以直接传递Python代码作为字符串)。最后,我们可以像调用其他C#方法一样调用Python函数,将结果......
  • finally语句块相关面试题
    publicstaticvoidm(){try{System.out.println("try...");System.exit(0);}finally{System.out.println("finally...");}}上述程序中,finally语句块中的内容还能被执行吗?答:不能被执行......
  • 分布式下的数据拆分,读写分离,分库分离相关问题
    一、为什么要用分库分表当不使用分库分表的情况下,系统的性能瓶颈主要体现在:当面临高并发场景的时候,为了避免Mysql崩溃(MySql性能一般的服务器建议2000/s读写并发以下),只能使用消息队列来削峰。受制于单机限制。数据库磁盘容量吃紧。数据库单表数据量太大,sql越跑越慢而分库分......
  • python 文件上传
    #-*-coding:utf-8-*-fromtornado.webimporturlimporttornado.webfromtornadoimporthttpclientfrom.baseimportBaseHandlerfromutils.utilsimportcreate_passwordfromutils.decoratorsimportjwt_async,auth_validated,role_validatedimportpeew......