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来运行它。

 

posted @ 2024-02-18 17:48  zhenjingcool  阅读(8)  评论(0编辑  收藏  举报