• python源码学习(一)——python的总体架构


    python源码学习(一)——python的总体架构

    学习环境:

    系统:ubuntu 12.04 STL
    python版本:2.7
    既然要学习python的源码,首先我们要在电脑上安装python并且下载python的源码,ubuntu 12.04 STL
    自带的python版本为2.7.3,这就可以了,接下来下载源码,下载python2.7.7的源代码,下载结束后解压文件,我们会看到如下文件结构:
    2014-06-12 17:21:53的屏幕截图,接下来介绍一下,
    demo文件夹里放的是一些例子;
    Doc文件夹里放的是文档,Grammer是语法分析器,include是python所包含的一些头文件,Lib是python的库,都是用python语言写的,Moduels是用C写的python模块,Parser是分词器。图片是最生动的文字,现在我来附上我所理解的python总体架构图片:
    2014-06-12 17:17:35的屏幕截图
    其中,最左边的python的库,模块以及用户自定义的模块,都依赖于python解释器来实现,而python解释器主要包括扫描器,分词器,编译器和代码生成四部分,我们写一个python文件之后,由python解释器执行,其大致执行过程如下:
    1、扫描器扫描python文件,将扫描结果发给分词器;
    2、在扫描过程中识别出文件中的对象,类型和结构(注:在python中类型和结构都是对象);
    3、分词器将结果发给编译器,编译器在此时生成相应对象同时给对象分配内存空间;
    4、编译之后将代码生成,进行内存管理并处理当前状态。
    5、对象、类型、结构体、内存管理以及当前状态构成了python极其复杂的runtime运行时。
    还有,很多人会有疑问,python是动态语言,内存到底是如何管理的,初来乍到,我也不太明白,由于python的各种历史原因,python的内存处理和线程管理非常复杂,打开源码看看,如果出现类似object_new这样的东西,那么他的内存就是用C++中的new来开辟的,如果是object_malloc这样的东西,则表示内存是用C中的malloc来实现的。
    python属于脱管型的语言,内存不需要我们手动处理,方便了很多,其实,python在底层是用自动引用计数器来实现的,python中创建小对象时,往往直接在内存池中创建,而大对象则是使用new/malloc从内存中再创建一个。针对并不复杂的对象关系时,比如只有一个对象时,python是不会运行链路检测的,而如果对象很多,过系又很复杂,就会有一个链路检测,以防出现循环引用和死循环的问题,当释放内存时,则遵守自动引用计数的规则,非常了不起。
    好了,本篇先讲到这里,下次继续学习。

    后续的python学习笔记: http://www.androiddev.net/python2/ 

  • 相关阅读:
    ESP32环境搭建(arduino)
    uPyCraftIDE的介绍以及使用
    ESP32项目汇总
    MicroPython固件烧写
    Server 架构
    base家族在线解密工具
    第1年2月24日 iOS相机旋转问题 为什么UIimage.ciimage值为空
    第1年2月23日 du -sh * | sort -n 统计当前文件夹(目录)大小,并按文件大小排序
    第1年2月14日 mac 运行java
    第1年2月10日 检查iOS app证书过期时间信息
  • 原文地址:https://www.cnblogs.com/skyfree/p/3834030.html
Copyright © 2020-2023  润新知