热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python程序代码解析_Python2.7.7源码分析

众所周知,直接访问Python官网非常慢,而且可能有时候根本无法访问。所以,源码直接放在这里便于下载。Python2.7.7的源码

众所周知,直接访问Python官网非常慢,而且可能有时候根本无法访问。所以,源码直接放在这里便于下载。Python 2.7.7的源码,学习Python的参考素材。tar.xz压缩格式。使用下面这个命令解压缩:

tar -xvf ./Python-2.7.7.tar.xz

------------------------------------------分割线------------------------------------------

用户名:ftp1.linuxidc.com

密码:www.linuxidc.com

在 2015年LinuxIDC.com\8月\Python2.7.7源码分析

------------------------------------------分割线------------------------------------------

源代码主要目录结构

Demo: python 的示例程序

Doc: 文档

Grammar: 用BNF的语法定义了Python的全部语法,提供给解析器使用

Include: 头文件,在用c/c++编写扩展模块时使用

Lib: Python自带的标准库,用python编写的

Modules: 用c编写的内建模块的实现,zlib,md5 等

Objects: 内建对象类型的实现 list,dict 等

PC: windows 平台相关文件

PCbuild: Microsoft Visual C++ 项目工程目录

Parser: 对 Python 代码进行词法分析和语法分析的代码

Python: 字节码编译器和解释器

Tools: 一些用 Python 开发的工具

Python 的对象定义和创建

在 Python 中,一切都是对象

Python 中的对象有定长对象PyObject (如 int 对象),变长对象PyVarObject(如 list 对象), Python 的对象都属于这两种之一。对象中包含引用计数和类型信息,管理和创建对象需要用到。还包含属性值的存储空间。

PyObject 对象在内存中的结构类似下面代码:

// 在 Include/object.h 中

// 定长对象

typedef struct _object {

int ob_refcnt; // 用于内存管理的引用计数

struct _typeobject *ob_type; // 类型对象,包含类型信息

} PyObject;

// 变长对象

typedef struct {

int ob_refcnt; // 用于内存管理的引用计数

struct _typeobject *ob_type; // 类型对象,包含类型信息

Py_ssize_t ob_size; // 变长对象(容器类: list等)容纳元素的个数

} PyVarObject;

// int 对象

typedef struct {

PyObject_HEAD

long ob_ival;

} PyIntObject;

类型对象

在PyObject 的类型对象中(struct _typeobject *ob_type;),有关于类型的名称,内存占用大小,构造,析构函数指针等属性。这些是创建对象所需要的信息。

// 类型对象定义代码片段

typedef struct _typeobject {

PyObject_VAR_HEAD

const char *tp_name; /* 名称, 打印时输出的格式 "." */

Py_ssize_t tp_basicsize, tp_itemsize; /* 创建对象时分配的内存空间大小 */

/* 类型实现的标准方法 */

destructor tp_dealloc;

printfunc tp_print;

getattrfunc tp_getattr;

setattrfunc tp_setattr;

cmpfunc tp_compare;

reprfunc tp_repr;

/* 数值对象的操作方法集合 */

PyNumberMethods *tp_as_number;

/* 序列对象的操作方法集合 */

PySequenceMethods *tp_as_sequence;

/* 关联对象的操作方法集合 */

PyMappingMethods *tp_as_mapping;

// ...

} PyTypeObject;

// python 的类的基本类型,所有类型都应该从这个类型继承

PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */

PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */

PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */

所有类型对象,自定义类对象的类型都是 PyType_Type(python内置的 type 类型),PyType_Type 本身也是一个对象。

上面的 PyBaseObject_Type 类对象是所有其他类的基类(python中内置的 object 类型)。PyBaseObject_Type 本身也是一个对象。

数值/序列/关联对象的操作方法集合,定义了对象具有这三种对象的操作方法(如数值对象也可以有 []取值操作)。

对象的创建

类型对象在脚本被执行的时候创建,并且添加到符号表。在需要创建类对象的实例时,从符号表中获取类型对象,并创建它的实例(在 symtable.c 文件中有相关符号表的代码)。 C api 创建类对象有一套接口:

// 创建一个整型类对象

PyObject* intObj = PyObject_New(PyObject, &PyInt_Type);

PyObject *_PyObject_New(PyTypeObject *tp)

{

PyObject *op;

op = (PyObject *) PyObject_MALLOC(_PyObject_SIZE(tp));

if (op == NULL)

return PyErr_NoMemory();

return PyObject_INIT(op, tp);

}

在 python 中创建对象时,创建过程如下例描述:

class Test(object):

pass

objTest = Test()

PyObject_Call 函数被调用,参数是 Test 类对象

因为继承自 object, 根据类型对象的类型调用 object类型的 tp_call

tp_call 调用 tp_new,tp_init(对应 python类的 __init__ 初始化构造函数)。

logo.gif



推荐阅读
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • Visual Studio Code (VSCode) 是一款功能强大的源代码编辑器,支持多种编程语言,具备丰富的扩展生态。本文将详细介绍如何在 macOS 上安装、配置并使用 VSCode。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • 华为捐赠欧拉操作系统,承诺不推商用版
    华为近日宣布将欧拉开源操作系统捐赠给开放原子开源基金会,并承诺不会推出欧拉的商用发行版。此举旨在推动欧拉和鸿蒙操作系统的全场景融合与生态发展。 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 使用虚拟机配置服务器
    本文详细介绍了如何使用虚拟机配置服务器,包括购买云服务器的操作步骤、系统默认配置以及相关注意事项。通过这些步骤,您可以高效地配置和管理您的服务器。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 视频编码涉及多个关键参数,如比特率、帧率和采样率等。比特率(Bit Rate)是指单位时间内视频或音频文件的数据传输量,通常以千比特每秒(Kbps)为单位。这些参数对视频质量和文件大小有重要影响。帧率(Frame Rate)表示每秒钟显示的图像帧数,而采样率(Sample Rate)则指每秒从连续信号中提取并形成离散信号的次数。了解这些基础概念有助于更好地优化视频编码效果。 ... [详细]
author-avatar
0704034铜豌豆
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有