当前位置:   article > 正文

3-折腾python:1+1=3_python1+1等于几

python1+1等于几

目标

今天的目标很简单:让python的计算出现奇奇怪怪的"错误".
从今天起,我们正式跨入python虚拟机 运行时部分 的恶搞.

vs的使用

要阅读python庞大的源码,你得拥有足够的耐心,因为他的函数调用特别复杂,甚至多达几十层才能实现一个在我们眼中特别简单的功能(如今天的恶搞对象:加减乘除).
这时候,我们的工具就得派上用场了:vs的查找.

这里可不是普普通通的查找哦,我们在一个单词上右键,然后点击Find all references,也就是"找到所有引用".下方就会显示出所有引用了这种对象的列表,如下:
点击"查找引用"
找到啦
因为vs的某些局限,你无法直接ctrl+单击查看函数的实现,这里为了搞事情我们得找到加法处理的函数,所以只能查找所有引用,然后找到代表着"实现声明式"的那一个,就像上图标蓝的.根据常识,我们知道其他的都是调用这个函数,因此找到实现只能这么办!
(或者用眼睛找个半个小时也不是不行,何况我自己找这个函数已经找了半个小时了)

恶作剧1:1+1=3

不想看过程的话,直接看最后,节约时间吧如果不想了解具体的话:传送
今天的练手恶搞啦.我们知道加法的英文,ADD,因此在我半个小时劳动成果的文件Python/ceval.c中查找字符串"ADD",(记得打开大写锁定,也就是说Add不会被搜索).
跟着直觉走,1+1应该属于二元运算,也就是BINARY,这么说,给出结果吧:Python/ceval.c:2068.相关case如下

PyObject *right = POP();
PyObject *left = TOP();
PyObject *sum;
/* NOTE(vstinner): Please don't try to micro-optimize int+int on
   CPython using bytecode, it is simply worthless.
   See http://bugs.python.org/issue21955 and
   http://bugs.python.org/issue10044 for the discussion. In short,
   no patch shown any impact on a realistic benchmark, only a minor
   speedup on microbenchmarks. */
if (PyUnicode_CheckExact(left) &&
         PyUnicode_CheckExact
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/686217
推荐阅读
相关标签
  

闽ICP备14008679号