python源码学习_Python源码学习(一)

考虑到性能的要求,我在工作中用的最多的是c/c++,然而,工作中又经常会有一些验证性的工作,这些工作对性能的要求并不高,反而对完成的效率要求更高,对于这样的工作,用一种开发效率高的语言是合理的想法,鉴于python的流行以及为大家所称道的开发效率和灵活性,我便开始渐渐多的接触起python来。可是,问题又来了,用python验证完了之后,需要优化性能,甚至移植到c/c++里面来,这时候,愈发觉得有必要深入学习python,了解其内部原理。经过一番搜索,找到了这本《Python源码剖析》,开始了我的python深入学习之旅。

一、Python对象初探

python语言中的一切,包括变量和变量类型,底层都是靠c语言的某种对象/结构体来实现的。也可以理解为,python中所有的东西都是用c的对象来实现的(这里理解为struct的对象)。这些所有对象都对应的定义中,开头的部分是相同的,都是PyObject:

[object.h]

typedefstruct_object {

PyObject_HEAD

} PyObject;

[object.h]

#ifdef Py_TRACE_REFS/*Define pointers to support a doubly-linked list of all live heap objects.*/

#define _PyObject_HEAD_EXTRA \

struct _object *_ob_next; \struct _object *_ob_prev;#define _PyObject_EXTRA_INIT 0, 0,

#else

#define _PyObject_HEAD_EXTRA

#define _PyObject_EXTRA_INIT

#endif

/*PyObject_HEAD defines the initial segment of every PyObject.*/

#define PyObject_HEAD \_PyObject_HEAD_EXTRA \intob_refcnt; \struct _typeobject *ob_type;

整型变量ob_refcnt与Python的内存管理机制有关,它实现了基于引用计数的垃圾收集机制。而ob_type是一个指向_typeobject结构体的指针,_typeobject结构体定义了所指向对象的类型,定义如下:

[object.h]

typedefstruct_typeobject {

PyObject_VAR_HEADchar *tp_name; /*For printing, in format "."*/

int tp_basicsize, tp_itemsize; /*For allocation*/

/*Methods to implement standard operations*/destructor tp_dealloc;

printfunc tp_print;

……/*More standard operations (here for binary compatibility)*/hashfunc tp_hash;

ternaryfunc tp_call;

……

} PyTypeObject;

也就是说PyTypeObject这个结构体定义了python的c代码中的对象的类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值