Python源码剖析
波波子
这个作者很懒,什么都没留下…
展开
-
《Python源码剖析》笔记 11.4 函数参数的实现
在11.4中,作者做了一个输出na,nk,n的实验,由于我对c语言的不熟悉,导致了一个可笑的错误:红框里面是我一开始写的代码,下面的是查资料以后写的,看起来这两个都一样,但结果却是差的很多,都以为这个括号“()”,和python的格式化输出不一样,c语言的printf提供变量不需要加括号,输出如下:出现上下输出不一样的原因就是,printf会把括号里面的赋给一个%d,如果是括号,就会赋值括号里面最后一个元素,而后面的两个%d,因为没有变量赋值,导致出现了随机数。...原创 2021-08-11 09:20:48 · 98 阅读 · 0 评论 -
《Python源码剖析》笔记 10.2Python虚拟机中的for循环控制流
在原书中,作者只给出了修改源代码的运行结果,没有给出修改的代码,在网上搜索,基本上都是来自这个博客:https://www.cnblogs.com/beiluowuzheng/p/9496410.html但是,这个博客的作者的实现和原书中作者的现实效果有些不同,没有实现用654321来控制输出,这里给出我的代码:(ceval.c,星号注释部分是我添加的代码,版本为Python2.7.13)PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwf原创 2021-07-23 14:23:07 · 177 阅读 · 0 评论 -
《Python源码剖析》笔记 9.3其他一般表达式
在9.3节的实验中,BINARY_ADD的修改没有给出源代码,这里给出我的源代码:星号注释里面是增加的代码首先在虚拟机主循环部分先声明我们需要的变量,因为C必须在开头声明变量,不然会报错 // 虚拟机主循环 for (;;) { /************************BINARY_ADD***************************/ PyObject* target = PySys_GetObject("stdout"); char temp[256]原创 2021-07-21 11:23:36 · 80 阅读 · 0 评论 -
《Python源码剖析》笔记 SmallPython
书中的代码没有给完整,而且有一些bug,可能是版本的不同,我的编译环境是VS2010。文件目录:SmallPython.cpp的代码:// SmallPython.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdlib.h>#include <string>#include <map>#include <iostream>using namespace std;/原创 2021-07-17 11:49:38 · 86 阅读 · 0 评论 -
《Python源码剖析》笔记Hack PyDictObject(2)
在5.5节中,第二个实验中,我使用的是Python2.7.13,由于书中没有提供源代码,我尝试修改了几次,结果和书中差别很大,不知道怎么解决:static voiddict_dealloc(register PyDictObject *mp){ register PyDictEntry *ep; Py_ssize_t fill = mp->ma_fill; PyObject_GC_UnTrack(mp); Py_TRASHCAN_SAFE_BEGIN(mp)原创 2021-07-16 15:42:57 · 76 阅读 · 0 评论 -
《Python源码剖析》笔记Hack PyDictObject(1)
在5.5节中,第一个实验中,我使用的是Python2.7.13,和书中的一些类型的定义有些不同:/*****************Test Func*********************/// dictobject.c 自定义的函数static void ShowDictObject(PyDictObject* dictObject){ PyDictEntry* entry = dictObject->ma_table; int count = dictObject->ma原创 2021-07-16 14:58:08 · 71 阅读 · 0 评论 -
《Python源码剖析》笔记insertdict()
在第五章Python中的Dict对象中,5.3.3插入与删除的insertdict代码段,作者给出的注释有些问题:这里实际上是对应ep的几个状态,在python2.7中,加入了判断搜索失败的条件语句:ep = mp->ma_lookup(mp, key, hash); if (ep == NULL) { // 搜索失败,收回传入参数的引用计数 ...}而书中的几个状态对应如下:if (ep->me_value != NULL) { // active态原创 2021-07-16 11:25:37 · 191 阅读 · 0 评论 -
《Python源码剖析》笔记list_print()
目前学习到第三章PyListObject的内容,在最后一小节Hack PyListObject操作的时候,作者并没有给源代码,这里是我的修改。static intlist_print(PyListObject *op, FILE *fp, int flags){ int rc; Py_ssize_t i; PyObject *item; rc = Py_ReprEnter((PyObject*)op); if (rc != 0) { if (r原创 2021-04-05 20:59:09 · 1527 阅读 · 8 评论 -
《Python源码剖析》笔记ShowCharacter()
目前学习到第三章PyStringObject的内容,在最后一小节Hack PyStringObject操作的时候,作者并没有给源代码,或者说没有直接说明如何修改源代码,这里是我的一些探索。运行环境:window10vs2010python2.7.13,编译的是PC目录里面的VS9.0的项目这是原文中的描述:作者说是通过在string_ength中添加代码,而这个函数实际上是这样的:static Py_ssize_tstring_length(PyStringObject *a){原创 2021-04-04 15:36:20 · 992 阅读 · 12 评论 -
《Python源码剖析》笔记int_repr()
在原书中,作者使用vs2003运行python2.5的项目,而现在配置这样的环境比较复杂,所以我尽量在配置环境上时间相差小一点,刚配置好,编译成功源文件,希望按照书上说的。修改int_repr()函数,结果变化有点大,弄了很久最后失败了,但把过程记录下来,以供以后考证。运行环境:window10vs2010python2.7.13,编译的是PC目录里面的VS9.0的项目先看看原书的写法:作者在源代码中修改了int_repr()这个函数,但是我在python2.7.13版中,没有找到这个函数,作原创 2021-03-24 20:43:22 · 773 阅读 · 6 评论 -
《Python源码剖析》笔记 int_print()
在原书中,作者使用vs2003运行python2.5的项目,而现在配置这样的环境比较复杂,所以我尽量在配置环境上时间相差小一点,刚配置好,编译成功源文件,希望按照书上说的,修改int_print()函数,结果变化有点大,弄了很久才成功。原创 2021-03-24 17:49:06 · 670 阅读 · 10 评论