《Python源码剖析》笔记 10.2Python虚拟机中的for循环控制流

本文介绍了对 Python2.7.13 版本的 `PyEval_EvalFrameEx` 函数进行修改,以实现通过特定数值(654321)控制 FOR 迭代过程中的输出。博主分享了添加的代码段,用于在遇到特定条件时打印迭代信息。在 FOR_ITER 操作中,当遇到数值等于 654321 时,会标记并输出当前迭代的数值。

在原书中,作者只给出了修改源代码的运行结果,没有给出修改的代码,在网上搜索,基本上都是来自这个博客:https://www.cnblogs.com/beiluowuzheng/p/9496410.html
但是,这个博客的作者的实现和原书中作者的现实效果有些不同,没有实现用654321来控制输出,这里给出我的代码:(ceval.c,星号注释部分是我添加的代码,版本为Python2.7.13)

PyObject *
PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
{
   
   

/***********************FOR_CONTROL************************/
int flag = 0;
/***********************FOR_CONTROL************************/

flag用于标识,每次开始循环被初始化为0,当list中出现654321,则置flag为1,当发现flag为1,则接下来按规定进行输出。

        TARGET(JUMP_ABSOLUTE)
        {
   
   
            JUMPTO(oparg);  // (next_instr == first_instr + (x))
			/***********************FOR_CONTROL************************/
			// printf("[JUMP_ABSOLUTE] : next_instr = %d...\n", *next_instr);
			if (*next_instr == FOR_ITER && flag == 1)
			{
   
   
				printf("[JUMP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值