眾所周知,直接訪問Python官網非常慢,而且可能有時候根本無法訪問。所以,源碼直接放在這裡便於下載。Python 2.7.7的源碼,學習Python的參考素材。tar.xz壓縮格式。使用下面這個命令解壓縮:
tar -xvf ./Python-2.7.7.tar.xz
------------------------------------------分割線------------------------------------------
FTP地址:ftp://ftp1.linuxidc.com
用戶名:ftp1.linuxidc.com
密碼:www.linuxidc.com
在 2015年LinuxIDC.com\8月\Python2.7.7源碼分析
下載方法見 http://www.linuxidc.com/Linux/2013-10/91140.htm
------------------------------------------分割線------------------------------------------
無需操作系統直接運行 Python 代碼 http://www.linuxidc.com/Linux/2015-05/117357.htm
CentOS上源碼安裝Python3.4 http://www.linuxidc.com/Linux/2015-01/111870.htm
《Python核心編程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm
《Python開發技術詳解》.( 周偉,宗傑).[高清PDF掃描版+隨書視頻+代碼] http://www.linuxidc.com/Linux/2013-11/92693.htm
Python腳本獲取Linux系統信息 http://www.linuxidc.com/Linux/2013-08/88531.htm
在Ubuntu下用Python搭建桌面算法交易研究環境 http://www.linuxidc.com/Linux/2013-11/92534.htm
Python 語言的發展簡史 http://www.linuxidc.com/Linux/2014-09/107206.htm
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; /* 名稱, 打印時輸出的格式 "<module>.<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()
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2015-08/121168p2.htm