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

将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存在.

支持循环垃圾收集 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

上下文变量对象 注意 在版本3.7.1中更改: 在Python 3.7.1中,所有上下文变量C的签名都是更改使用PyObject指针代替PyContext, PyContextVar,和PyContextToken,例如: // in 3.7.0: PyContext *PyContext_New(void); // in 3.7.1+: PyObject *PyContext_New(void); 有关详细信息,请参阅bpo-34762 . 版本3.7. 本节详细介绍了contextvarsmodule. PyContext C结构用来表示contextvars.Context宾语。 PyC

胶囊 参考为扩展模块提供C API 有关使用这些物体的更多信息. 版本3.1. PyCapsule 这个 的子类型PyObject表示一个不透明的值,对于需要传递不透明值的Cextension模块很有用(作为void*指针)通过Python代码到其他C代码。它通常用于使一个模块中定义的Cfunction指针可用于其他模块,因此可以使用通常的导入机制来访问动态加载的模块中定义的C API。 PyCapsule_Destructor 胶囊的析构函数回调的类型。定义为: typedef void (*PyCapsule_Destructor)(PyObject *); 请参阅PyCapsule_Ne

弱引用对象 Python支持weak references作为第一类对象。有两种特定的对象类型直接实现弱引用。第一个是简单的参考对象,第二个作为原始对象的代理,尽可能地 // PyWeakref_Check( ob ) 如果ob是引用或代理对象,则返回true . int PyWeakref_CheckRef( ob ) 如果ob是参考对象,则返回true. int PyWeakref_CheckProxy( ob ) 如果ob是代理对象,则返回true。 PyObject* PyWeakref_NewRef( PyObject  *ob,PyObject *callback) Return

MemoryView对象 一个memoryview对象将C级缓冲区接口暴露为Python对象,然后可以像其他对象一样传递 PyObject * PyMemoryView_FromObject( PyObject  *obj) Return value: New reference. 从提供缓冲接口的对象创建一个memoryview对象。如果obj支持可写缓冲区导出,memoryview对象将被读/写,否则它可能是只读或读/写导出器的分布. PyObject * PyMemoryView_FromMemory( char  *mem,Py_ssize_t  size,int  flags) Re