• Python源码剖析学习一


    1.Python粗猎

    分析python,以及webpy,边完成那个web系统,作为对python的一个总结

    如何从源代码编译出Python可执行程序。
    在整个剖析源码的过程中,最好的学习方发就是不断根据掌握的知识修改Python的源代码,以印证自己的
    猜想和知识

    Python的运行时环境,包括对象/类型系统(Object/Type structures)、内存分配器(Memory
    Allocator)和运行时状态信息(Current State of Python)。

    运行时状态维护了解释器在执行字节码时不同的状态(比如正常状态和异常状态)之间切换的动作,可以将
    它视为一个巨大而复杂的有穷状态机。

    内存分配器则全权负责Python中创建对象时,对内存的申请工作,实际上它就是Python运行时与C中
    malloc的一层接口。

    对象/类型系统则包含了Python中存在的各种内建对象

    Python的核心----解释器(interpreter),或者称为虚拟机
    Scanner(对应词法分析)----Parse(对应语法分析),建立抽象语法树(AST)----Python字节码(byte
    code)----Code Evaluator来执行这些字节码,又称为虚拟机


    Python的C API中提供了一个输出对象的接口PyObject_Print(PyObject *,FILE *,int);
    PyString_FromString是Python提供的用于从C中的原生字符数组创建出Python中的字符串对象。

    2.Python源码调试技巧

    做webpy,学习<<Python源码剖析>>这本书,以期对py有一个深入的理解
    监视Python内部运行时的一个技巧----设置条件
    通过添加一些条件点,获取你想得到的一些信息

    static int
    int_print(PyIntObject *v, FILE *fp, int flags)
    /* flags -- not used but required by interface */
    {
    //add by moonflow
    //PyObject* str = PyString_FromString("i am in int_print");
    //PyObject_Print(str,stdout,0);
    //printf("\n");
    //add by moonflow
    if(PyInt_AsLong(v) == -999){
    PyObject* str = PyString_FromString("i am in int_repr");
    PyObject* out = PySys_GetObject("stdout");
    if(out != NULL){
    PyObject_Print(str,stdout,0);
    printf("\n");
    }
    }
    //oringal
    fprintf(fp, "%ld", v->ob_ival);
    return 0;
    }

    彻底理解Python运行时行为,就会知道如何利用Python的C API来编写Python扩展,如何在C中内嵌Python解释器等

    Python2.5的源码中,Python自定义了一个新的类型Py_ssize_t 


  • 相关阅读:
    SpringBoot读取Resource下文件的几种方式(十五)
    Springboot+vue前后端分离文件上传、下载方式及与Spring的异同(十四)
    springboot多个service互相调用的事务处理(十三)
    Bigdecimal用法
    Linux常见wenti
    informix常见问题
    Spring-boot常见问题(十二)
    浅析VO、DTO、DO、PO的概念、区别和用处(八)
    Tbase读写分离与分库分表
    函数的节流和抖动
  • 原文地址:https://www.cnblogs.com/moonflow/p/2324701.html
Copyright © 2020-2023  润新知