回复:__builtins__magic behavior

En Sun,2008年9月7日14:00:48 -0300,Patrick Maupin Python在与内置的打交道时会采取一些捷径.我只是描述会发生什么(我不会说是"正确"还是"错误").
EXEC语句给出了字符串源时,将其编译并最终调用Pyeval_evalcodeex,该源使用pyframe_new创建一个新帧并最终执行.
帧对象包含指向先前帧,要执行的代码,指向当前Globals *和 *单独的指针指向当前内置的指针.
在pyframe_new内部,有一个快捷方式:如果新框架和前一个共享相同的全球群体,则将以前的内置属于新框架中.只有在全球范围内差异时,内置的搜索是在全球范围内搜索的.从frameobject.c: /*我们共享全球,我们共享内置.保存查找和通话. */
正是这种假设在您的代码中失败.
如果您想使用修改后的内置执行一些代码,请不要在 *调用 *代码中更改__ builtins__,而要在您传递给Exec调用的全球中更改.这似乎是最合乎逻辑的方法,以及开发人员似乎期望的方式.
- -
Gabriel Genellina

# 回答1


在9月7日,2:50*PM," Gabriel Genellina" 那正是我的问题.感谢您的说明.
实际上,我的用例与此不同.我是
动态创建模块对象,并正在尝试
理解幕后__uiltins ____________________________________________
模块对象中的魔术,没有意识到魔术是
实际上在执行帧中.
谢谢,
pat
# 回答2


加布里埃尔,我可以请您配置新闻阅读器软件或
编辑器将帖子的每行的长度限制为70个字符
根据电子邮件和usenet的通用标准,宽?你的行是
明显更长的时间,包括325的一条线
角色宽.这迫使很多后退,向前滚动到
阅读您的帖子.
谢谢你.
- -
史蒂文
# 回答3


En Sun,2008年9月7日19:30:07 -0300,Steven D'Aprano
修复了,感谢您指出的.歌剧会自动包装长行
我自己没有注意到这个问题.
我不记得什么时候或为什么,我更改了设置(如果 * i *将其更改为
全部!)
- -
Gabriel Genellina

标签: python

添加新评论