在原书中,作者只给出了修改源代码的运行结果,没有给出修改的代码,在网上搜索,基本上都是来自这个博客: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

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

被折叠的 条评论
为什么被折叠?



