以下代码在cpython中做什么

阿卜杜勒·尼亚斯(Abdul Niyas)总理

我正在学习cpython内部结构(尤其是is运算符),并IS_OPceval.c中遇到了以下操作码实现

    case TARGET(IS_OP): {
        PyObject *right = POP();
        PyObject *left = TOP();
        int res = (left == right)^oparg;
        PyObject *b = res ? Py_True : Py_False;
        ...
    }

我知道前两个语句从堆栈中弹出操作数。

PyObject *right = POP();
PyObject *left = TOP();

但是我的问题与以下陈述有关。

int res = (left == right)^oparg;

在我理解is的python中,运算符比较对象标识,在其他团队中,它将检查两个对象是否都指向同一对象。所以我的问题是,仅以下代码足以检查对象身份?,为什么实际的实现再次将专有的OR(^)与oparg

int res = (left == right)
暗影游侠

IS_OP操作码被用于两个 isis not^oparg当翻转比较的结果oparg1(为is not)和叶独自当它是0(对is),所以相同的字节码可以只通过调整branchlessly处理这两种情况oparg(在dis输出isIS_OP 0is notIS_OP 1)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以下代码在C中做什么?

来自分类Dev

以下代码段是做什么的

来自分类Dev

&&和||做什么 在以下代码中表示

来自分类Dev

以下代码中“ *&”的用法是什么

来自分类Dev

以下代码中\ +的含义是什么

来自分类Dev

以下代码中的错误是什么?

来自分类Dev

以下代码中超级指向什么?

来自分类Dev

以下代码中的“-97”是什么意思?

来自分类Dev

Sailsjs:以下代码中为什么不使用* return *?

来自分类Dev

为什么以下代码在C ++中是非法的

来自分类Dev

在以下代码中添加内容的目的是什么?

来自分类Dev

以下代码中的错误是什么?(Python 2.7,矩阵)

来自分类Dev

为什么在以下代码中得到NullPointerException?

来自分类Dev

在以下代码中添加内容的目的是什么?

来自分类Dev

GWT中的以下代码行是什么意思

来自分类Dev

以下代码中的错误是什么?(Python 2.7,矩阵)

来自分类Dev

以下代码中各行的含义是什么

来自分类Dev

es5中的以下代码等效于什么?

来自分类Dev

以下代码中造成僵尸的原因是什么

来自分类Dev

以下代码中的 f(2) 是什么?

来自分类Dev

以下代码中的下划线有什么作用?

来自分类Dev

kotlin 中以下代码的等价物是什么?

来自分类Dev

以下Python代码做什么?

来自分类Dev

为什么以下代码无法解析?

来自分类Dev

以下代码的目的是什么?

来自分类Dev

以下代码片段等效于什么?

来自分类Dev

27017在以下代码中代表什么?

来自分类Dev

以下代码有什么区别?

来自分类Dev

以下代码有什么区别