使用Python进行Curses编程 作者: A.M。Kuchling,Eric S. Raymond 发布: 2.04 Abstract 本文档描述了如何使用curses扩展模块来控制文本模式显示 什么是curses? curses库为基于文本的终端提供了一个独立于终端的屏幕绘画和键盘处理设施;这些终端包括VT100,Linux控制台和各种程序提供的模拟终端。显示终端支持各种控制代码,以执行常见操作,例如移动光标,滚动屏幕和擦除区域。不同的终端使用各种不同的代码,往往有自己的小怪癖. 在图形显示的世界中,人们可能会问“为什么要打扰”?字符单元显示终端是一种过时的技术,但是有一些利基可以做出奇

将扩展模块移植到Python 3 author: Benjamin Peterson 摘要 虽然改变C-API不是Python 3的目标之一,许多Python级别的更改使得Python 2的API无法实现。事实上,在//级别上,int()和long()统一等一些变化更为明显。本文档努力记录不兼容性以及它们如何解决. 条件编译 只编译Python 3的一些代码的最简单方法是检查PY_MAJOR_VERSION大于或等于3. #if PY_MAJOR_VERSION >= 3 #define IS_PY3K #endif API不存在的函数可以在条件块中等同于它们的等价物 更改为对象API

将Python 2代码移植到Python 3 author: Brett Cannon 摘要 Python 3是Python的未来,而Python 2仍然存在activeuse,最好让你的项目可用于两个主要版本的Python。本指南旨在帮助您弄清楚如何最好地支持Python 2&3同时 //如果您想要扩展模块而不是纯Python代码,请参阅将扩展模块移植到Python 3 . 如果您想阅读一个核心Python开发人员对Python 3came的存在进行了解,你可以阅读Nick Coghlan的Python 3 Q&一个orBrett Cannon的为什么Python 3存在.

API和ABI版本控制 PY_VERSION_HEX是以单个整数编码的Python版本号. 例如,如果PY_VERSION_HEX设置为0x030401a2,可以通过以下方式将其视为32位数来找到底层信息: 字节 位(大端序) 含义 1 1-8 PY_MAJOR_VERSION(3在3.4.1a2) 2 9-16 PY_MINOR_VERSION(4在3.4.1a2) 3 17-24 PY_MICRO_VERSION(1在3.4.1a2) 4 25-28 PY_RELEASE_LEVEL(0xA对于alpha,0xBfor beta,0xC发布候选人和0xF最后),在这种情况下它是alpha.

支持循环垃圾收集 Python对检测和收集涉及循环引用的垃圾的支持需要来自对象类型的支持,对象类型是其他对象的“容器”,也可以是容器。不存储对其他对象的引用或仅存储对原子类型(如数字或字符串)的引用的类型不需要为garbagecollection提供任何显式支持. 要创建容器类型,类型对象的tp_flags字段必须包含Py_TPFLAGS_HAVE_GC并提供tp_traverse处理程序的实现。如果该类型的实例是可变的,那么tp_clear还必须提供实现. Py_TPFLAGS_HAVE_GC 具有此标志集的类型的对象必须符合此处记录的规则。为方便起见,这些对象将被称为容器对象. 容器类型的

类型对象 也许Python对象系统最重要的结构之一是定义新类型的结构:PyTypeObject结构。可以使用PyObject_*()或PyType_*()函数中的任何一个来处理类型对象,但是对于大多数Python应用程序来说,它们并没有提供太多有趣的东西。这些对象是对象行为的基础,对于解释器本身以及实现新类型的任何扩展模块非常重要. 与大多数标准类型相比,类型对象相当大。大小的原因是每个类型对象存储大量值,主要是Cfunction指针,每个指针都实现了类型功能的一小部分。本节详细介绍了类型对象的字段。这些字段将按照它们在结构中的顺序进行描述. Typedef:unaryfunc,binaryf

公共对象结构 在Python的对象类型的定义中使用了大量结构。本节描述了这些结构及其使用方法. 所有Python对象最终在对象在内存中的表示开头共享少量字段。它们由PyObject和PyVarObject类型表示,它们又由一些宏的扩展定义,无论是直接还是间接地在所有其他Python对象的定义中使用. PyObject 所有对象类型都是此类型的扩展名。这是一种包含Python将对象指针作为对象处理的信息的类型。在正常的“发布”版本中,它只包含对象的引用计数和指向相应类型对象的指针。实际上没有声明为PyObject,但每个Python对象都可以转换为PyObject*。访问主题必须使用宏Py_RE

在堆上分配对象 PyObject * _PyObject_New( PyTypeObject  *type) Return value: New reference. PyVarObject * _PyObject_NewVar( PyTypeObject  *type,Py_ssize_t  size) Return value: New reference. PyObject * PyObject_Init( PyObject  *op,PyTypeObject  *type) Return value: Borrowed reference. 使用类型和初始引用初始化一个新分配的对象op

内存管理 概述 Python中的内存管理涉及包含所有Python对象和数据结构的私有堆。//私有堆的管理由Python memory manager在内部确保。Python内存管理器具有不同的组件,可以处理各种动态存储管理方面,如共享,分段,预分配或缓存. 在最低级别,原始内存分配器通过与操作系统的主题管理器交互来确保私有堆中有足够的空间来存储所有与Python相关的数据。在原始内存分配器之上,几个特定于对象的分配器在同一个堆上运行,并实现了适合每种对象类型特性的内存管理策略。例如,整数对象在堆字符串,元组或字典中的管理方式不同,因为整数意味着不同的存储要求和速度/空间权衡。Python内存管

初始化,终结和线程 在Python初始化之前 在嵌入Python的应用程序中,Py_Initialize()必须在使用任何其他Python / C API函数之前调用函数;除了几个函数和全局配置变量. 在初始化Python之前,可以安全地调用以下函数: 配置函数: PyImport_AppendInittab() PyImport_ExtendInittab() PyInitFrozenExtensions() PyMem_SetAllocator() PyMem_SetupDebugHooks() PyObject_SetArenaAllocator() Py_SetPath() Py_Se