分类 Python 下的文章

Python内核阅读(二): 对象的创建


起步

python提供两种来创建对象, 一种是C API, 第二种通过类型对象创建,如 PyLong_Type .

在C API中也有两类, 一类是泛型的API,形式如 PyObject_xxx ,可以应用在任何python对象上, PyObject_Print([int obj]|[string obj]) .参数可以任意类型,其API内部自己确定最终调用的函数是哪一个.

另一类与类型相关的API,如:

PyObject *a = PyLong_FromLong(10);

不论采用哪种C API,最终都是直接分配内存.


Python内核阅读(一): 对象的基石--PyObject


起步

为了了解python的整体架构,也为了提升自我能力,学习他人优秀代码.

源码获取

源码从github上获取, 不仅可以自由切换版本,也可以跟进作者的更新.

git clone https://github.com/python/cpython

我看的是3.6.2版本的,这是我阅读时候的最新版本, 切换版本用:

git checkout v3.6.2


python版本坑:md5例子


2和3的坑,踩一次记一次

起步

对于一些字符,python2和python3的md5加密出来是不一样的.

# python2.7
pwd = "xxx" + chr(163) + "fj"
checkcode = hashlib.md5(pwd).hexdigest()
print checkcode  # ea25a328180680aab82b2ef8c456b4ce

# python3.6
pwd = "xxx" + chr(163) + "fj"
checkcode = hashlib.md5(pwd.encode("utf-8")).hexdigest()
print(checkcode) # b517e074034d1913b706829a1b9d1b67