Python运行是由Graminit.c定义的相关介绍("Python运行机制解析:Graminit.c文件定义与功能详解")
原创
一、引言
Python作为一门流行的编程语言,其高效的运行机制一直是开发者关注的焦点。Python的运行过程涉及到多个组件和模块,其中Graminit.c文件是Python启动过程中的关键部分。本文将深入探讨Graminit.c文件的定义与功能,帮助读者更好地领会Python的运行机制。
二、Python运行机制概述
Python程序的运行过程可以分为以下几个阶段:
- 语法分析:将源代码转换成抽象语法树(AST)
- 字节码生成:将AST转换成字节码
- 字节码执行:通过Python虚拟机(PVM)执行字节码
Graminit.c文件在字节码执行阶段起着至关重要的作用。
三、Graminit.c文件介绍
Graminit.c文件是Python源码中的一个C文件,位于Python源码的“Objects”目录下。该文件关键负责初始化Python运行时环境,包括创建Python虚拟机(PVM)实例、初始化内置类型和模块等。
四、Graminit.c文件的关键功能
以下是Graminit.c文件中的几个关键功能:
4.1 创建Python虚拟机实例
Graminit.c文件中定义了PyInterpreterState结构体,用于即Python虚拟机实例。在Python程序启动时,会创建一个PyInterpreterState实例,并对其进行初始化。
PyInterpreterState *
PyInterpreterState_New(void)
{
PyInterpreterState *interp;
interp = (PyInterpreterState *)PyMem_New(PyInterpreterState, 1);
if (interp == NULL) {
return NULL;
}
interp->name = NULL;
interp->id = 0;
interp->modules = NULL;
interp->sysdict = NULL;
interp->builtins = NULL;
interp->modules = NULL;
interp->module administration;
interp->keepalives = NULL;
interp->finalizing = 0;
interp->async_safe = 0;
interp->audithooks = NULL;
interp->ceval = NULL;
interp->errors = NULL;
interp->importlib = NULL;
interp->importer = NULL;
interp->import hooks;
interp->tracefunc = NULL;
interp->profilefunc = NULL;
interp->checkinterval = 0;
interp->checklimit = 0;
interp->checkdepth = 0;
interp->checkdepths = NULL;
interp->nested = 0;
interp->usecount = 1;
interp->cleanup = 0;
interp->collect = 0;
interp->weakref_count = 0;
interp->gc = NULL;
interp->recursionlimit = 1000;
interp->recursiondepth = 0;
interp->recursionstack = NULL;
interp->audithookerrors = NULL;
interp->sys = NULL;
interp->builtins = NULL;
interp->error = NULL;
interp->warningerrors = NULL;
interp->cleanup_errors = NULL;
interp->err打压 = NULL;
interp->finalizing_errors = NULL;
interp->filename_errors = NULL;
interp->import_errors = NULL;
interp->module_errors = NULL;
interp->object_errors = NULL;
interp->type_errors = NULL;
interp->unraisable_errors = NULL;
interp->boxed = NULL;
interp->boxed->errors = NULL;
interp->boxed->unraisable_errors = NULL;
interp->boxed->import_errors = NULL;
interp->boxed->module_errors = NULL;
interp->boxed->object_errors = NULL;
interp->boxed->type_errors = NULL;
interp->boxed->filename_errors = NULL;
interp->boxed->import_errors = NULL;
interp->boxed->sys_errors = NULL;
interp->boxed->builtins_errors = NULL;
interp->boxed->error_errors = NULL;
interp->boxed->warning_errors = NULL;
interp->boxed->cleanup_errors = NULL;
interp->boxed->finalizing_errors = NULL;
interp->boxed->filename_errors = NULL;
interp->boxed->import_errors = NULL;
interp->boxed->module_errors = NULL;
interp->boxed->object_errors = NULL;
interp->boxed->type_errors = NULL;
interp->boxed->unraisable_errors = NULL;
interp->boxed->boxed = NULL;
interp->boxed->boxed->errors = NULL;
interp->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->finalizing_errors = NULL;
interp->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed = NULL;
interp->boxed->boxed->boxed->errors = NULL;
interp->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->boxed->finalizing_errors = NULL;
interp->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed = NULL;
interp->boxed->boxed->boxed->boxed->errors = NULL;
interp->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->boxed->boxed->finalizing_errors = NULL;
interp->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed = NULL;
interp->boxed->boxed->boxed->boxed->boxed->errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->finalizing_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->finalizing_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->finalizing_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->finalizing_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->unraisable_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->module_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->object_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->type_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->filename_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->import_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->sys_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->builtins_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->error_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->warning_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->cleanup_errors = NULL;
interp->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->boxed->