文档章节

Python 1.5.2 vs 1.0.1 头文件部分变更比较

刘军兴
 刘军兴
发布于 2016/01/12 10:53
字数 922
阅读 40
收藏 1
点赞 1
评论 0

Python 1.5.2 vs 1.0.1  (新 vs. 旧)

如同以前, 通过文件比较工具, 查看两个版本之间的差异.

Added Python.h:
   Include nearly all Python header files
   这样外面一般只需要包含此文件, 就能编写模块了.
  
Added abstract.h:
   Abstract Object Interface (many thanks to Jim Fulton)
   PROPOSAL: A Generic Python Object Interface for Python C Modules
   抽象对象接口/一般 python 对象接口.
   此文件很重要, 有大量的注释说明值得细看.
  
Deleted accessobject.h
Deleted allobjects.h  (新的 python.h 等价于该文件)
Deleted assert.h

bitset.h: 名字略微变动, 无本质变化.
Deleted bltinmodule.h
Added bufferobject.h :  Buffer object interface
   提供 PyBuffer_xxx 对象接口.

Added cStringIO.h : provides access to cStringIO objects from C.

ceval.h: 一般名字都改为 PyXXX, 包围以 DL_IMPORT(), Py_PROTO() 等宏.
  如 PyEval_xxx, Py_FlushLine, PyObject 等.
 
Deleted cgensupport.h

classobject.h : 名字改为 PyXXX

Added cobject.h : C objects to be exported from one extension module to another.
   用于在模块之间传递数据, 可看做是 void*.
   extern PyTypeObject PyCObject_Type.

compile.h : Definitions for bytecode
   改名为 PyCodeObject, 改用 lineno-table 机制.

Added complexobject.h : Complex number
   复数对象 PyComplexObject.

dictobject.h : 改名为 PyDictObject, 提供一组访问接口如 PyDict_Keys()

errcode.h : 新增一个, 无本质变化.

Deleted errors.h (可能改为 pyerrors.h )

eval.h : Interface to execute compiled code
   即接口函数 PyEval_EvalCode()

fileobject.h : PyFile_xxx

floatobject.h : PyFloatObject -- 浮点数对象.

frameobject.h : PyFrameObject -- 结构有一些调整, 引用含 PyThreadState, PyTryBlock 对象

funcobject.h : PyFunctionObject

grammar.h : 部分改名为 PyGrammar_XXX

import.h : PyImport_XXX; 对 inittab() 提供了接口.

intobject.h : PyIntObject.

intrcheck.h : PyOS_InterruptXXX() 中断检查, 如按下 Ctrl+C.

listobject.h : PyListObject .

longintrepr.h : long integer representation.
   多精度整数结构 PyLong_XXX.
longobject.h : PyLongObject .

Deleted mappingobject.h : 合并在 dictobject.h 中了.

marshal.h : PyMarshal_WriteXXX, _ReadXXX 读写接口.

metagrammar.h : 无本质变化.

methodobject.h : Method object interface
   改进为 PyCFunctionObject, PyMethodDef, PyMethodChain.

modsupport.h : Module support interface
   PyArg_Parse, _Bind :  参数解析/绑定估计改进了.
   Py_InitModule1,2,3,4 ...
  
moduleobject.h : Module object interface
   PyModule_XXX

mymalloc.h : 提供了一组 PyMem_xxx 宏/函数.
   一组包装的 Py_Malloc, _Realloc, _Free() 等.

Added mymath.h : 略, 与平台兼容有关.

myproto.h : 定义 Py_PROTO()

myselect.h : 与平台兼容有关, socket 相关.

mytime.h : 与平台兼容有关, time.h 相关.

node.h : Parse tree node interface
   解析树结构. PyNode_XXX.
  
object.h :
   PyObject, PyVarObject 结构确定.
   PyNumberMethods, PySequenceMethods, PyMappingMethods, PyBufferProcs 结构
   新增 tp_call, tp_str, tp_getattro, tp_setattro tp_as_buffer, tp_flags, tp_doc 等.
  
objimpl.h: PyObject_XXX 实现.

opcode.h : 增删了几个指令. CALL 统一为 CALL_FUNCTION.
    所以指令序号不连续了, 产生了空洞.

osdefs.h : 操作系统相关的一些定义.

parsetok.h : PyParser_XXX 无本质变化.

Added patchlevel.h : Newfangled version identification scheme.

pgenheaders.h : _Py_xxx 可能表示 python 内部使用的.

Added pydebug.h : 定义了一组 Py_DebugFlag .

Added pyerrors.h : 可能原来名为 errors.h
  PyErr_Set, _Clear, _Fetch 等. 异常处理相关定义.
  含一组预定义的异常, 如 PyExc_IOError 等.
 
Added pyfpe.h :  Define macros for handling SIGFPE.
   (可能用于浮点异常处理)

Added pystate.h : Thread and interpreter state structures and their interfaces
   PyInterpreterState (相当于进程) , PyThreadState (相当于线程)
   这样需了解如何实现多线程处理的.

pythonrun.h : Interfaces to parse and execute pieces of python code
   Py_Init, _Parse, _Run, _Exit 等接口.

Added pythread.h :
   定义 PyThread_XXX, 锁机制等.

rangeobject.h : Range object interface
   PyRangeObject .

rename1.h 改为 rename2.h :
   大量 python 原名字通过宏方式改名为新的 PyXXX 名字形式.
  
Added sliceobject.h : The unique ellipsis object "..."
   PySliceObject
 
stringobject.h : PyStringObject.

structmember.h : Interface to map C struct members to Python object...
   新增了几种支持的 C 数据类型(如 T_STRING_INPLACE)
   PyMember_Get, _Set

sysmodule.h : System module interface
   PySys_XXX

thread.h : PyThread_XXX, 实际实现在 pystate.h 中.

token.h : 无本质变化. (添加了数学 ** POW 运算符支持).

Deleted tokenizer.h : 可能移到 Parser 里面了.

traceback.h : 改名 PyTraceBack_XXX. 成为一个对象, 外面可访问.

tupleobject.h : PyTupleObject .


=================================================================
改动小结:
1. 名字变更为 PyXXX.
2. 新增了几种对象, 如 complex, slice 等.
3. 新增 TypeObject 中几个方法接口, callable, 魔法方法, 对象方法抽象接口.
4. Process/Thread 支持, 锁机制.
5. 异常处理增强/改进.

这些实现已经和最新版本接近了. 以后(这几天)有空再细节看一些.

© 著作权归作者所有

共有 人打赏支持
刘军兴
粉丝 54
博文 150
码字总数 226172
作品 0
昌平
Python函数声明以及与其他编程语言数据类型的比较

1、函数声明 与其它大多数语言一样 Python 有函数,但是它没有像 C++ 一样的独立的头文件;或者像 Pascal 一样的分离的 interface / implementation 段。在需要函数时,像下面这样声明即可:...

光明辉煌 ⋅ 04/21 ⋅ 0

0. Python3源码—编译

0.1. 整体架构 在最高的层次上,Python的整体架构可以分为三个主要的部分: 左:Python提供的大量的模块、库以及用户自定义的模块; 右:Python的运行时环境,包括对象/类型系统(Object/Ty...

whj0709 ⋅ 06/06 ⋅ 0

程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2 ⋅ 05/23 ⋅ 0

Python是如何怼翻其他编程语言而窜上宝座的

来PK啊! 谁怕谁啊! 在过去的两年间,Python一路高歌猛进,成功窜上“最火编程语言”的宝座。 更可怕的是,这把火不仅仅是在程序员的圈子里越烧越旺,甚至还烧到了程序员的圈子外,从小学生...

超级数学建模 ⋅ 04/18 ⋅ 0

我的 Django + Visual Studio Code 的 Pylint 设置

最近又开始使用起 Visual Studio Code 写 Python/Django 的项目,发现不少地方可以配置,而以前常常忽略了这些,只是简单的安装了相关插件了事。今天先讲讲 Pylint 的相关配置。 使用 Pylint...

I'm TualatriX ⋅ 04/14 ⋅ 0

高级爬虫(一):Scrapy爬虫框架的安装

Hi 小伙伴们差不多有半个月没有更新干货了,一直有点忙,而且这中间还有曲折过程,也就没有更新文章. 但今天无论如何也要更新一篇文章,接下来是爬虫高级篇重点讲解的地方! 最近会连载Scrap...

Python绿色通道 ⋅ 04/22 ⋅ 0

推荐几本对于Python初学者比较好的书籍(内含PDF)

我们提供一个初学者最好的Python书籍列表。Python是一个初级程序员可以学习编程的最友好语言之一。为了帮助您开始使用Python编程,我们分享此列表。泡一杯茶,选一本书阅读,开始使用Python编...

柯西带你学编程 ⋅ 06/08 ⋅ 0

超详细Python正则表达式操作指南(re使用),一

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式。Emacs 风格模式可读性稍差些,而且功能也不强,因此编...

Python雁横 ⋅ 05/26 ⋅ 0

个人总结——全面的『Python编码规范』

本文目的 『动态类型一时爽,代码重构火葬场』,说的是:动态语言在初期开发比较爽,但是到后期维护起来比较困难。Python 作为动态语言之一,自然也会有这样的缺点。其实说『火葬场』,也没有...

hezhiming ⋅ 05/18 ⋅ 0

Python logging 库的完整教程

前言 本文的标题是『完整』。所谓『完整』,大意是想表达:提炼出一组最小的经验组合,并且能够快速应用于工程中,能 work,甚至能完美地 work。这篇文章就是想要做到『如何能完美地work』。...

hezhiming ⋅ 05/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 9分钟前 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 11分钟前 ⋅ 0

容器之查看minikue的environment——minikube的环境信息

执行如下命令 mjduan@mjduandeMacBook-Pro:~/Docker % minikube docker-envexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/U......

汉斯-冯-拉特 ⋅ 12分钟前 ⋅ 0

mysql远程连接不上

设置了root所有hosts远程登录,可是远程登录还是失败,原因可能如下: 登录本地数据库 mysql -uroot -p123456 查询用户表 mysql> select user,host,password from mysql.user; 删除密码为空的...

冰公子 ⋅ 12分钟前 ⋅ 0

动态规划小题

凑硬币问题 问题: 有1元、3元、5元面值的硬币若干,要凑到11元需要最少几个硬币? 这是最简单的DP问题,记凑a元需要b个硬币为: n[a] = b。 1)首先,如果凑0元 需要0个硬币表示为 n[0] = 0...

阿豪boy ⋅ 14分钟前 ⋅ 0

shell之切换目录命令cd

让我们来看看linux下简单的 cd 命令,就是切换目录用的,在你当前的目录位置,进入下一个目录 让我们看看这个阿里云 ubuntu 目录,Linux虚拟目录中比较复杂的部分是它如何协调管理各个存储设...

woshixin ⋅ 17分钟前 ⋅ 0

使用 jsoup 模拟登录 urp 教务系统

需要的 jsoup 相关 jar包:https://www.lanzous.com/i1abckj 1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cook...

大灰狼时间 ⋅ 52分钟前 ⋅ 0

关于线程的创建

转自自己的笔记: http://note.youdao.com/noteshare?id=87584d4874acdeaf4aa027bdc9cb7324&sub=B49E8956E145476191C3FD1E4AB40DFA 1.创建线程的方法 Java使用Thread类代表线程,所有的线程对......

MarinJ_Shao ⋅ 今天 ⋅ 0

工厂模式学习

1. 参考资料 工厂模式-伯乐在线 三种工厂-思否 深入理解工厂模式 2. 知识点理解 2.1 java三种工厂 简单工厂 工厂模式 抽象工厂 2.2 异同点 逐级复杂 简单工厂通过构造时传入的标识来生产产品...

liuyan_lc ⋅ 今天 ⋅ 0

Java NIO

1.目录 Java IO的历史 Java NIO之Channel Java NIO之Buffer Java NIO之Selector Java NIO之文件处理 Java NIO之Charset Java 可扩展IO 2.简介 “IO的历史”讲述了Java IO API从开始到现在的发...

士别三日 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部