最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

CPython中處理is與is not語(yǔ)句示例詳解

 更新時(shí)間:2023年07月25日 16:11:12   作者:weapon  
這篇文章主要為大家介紹了CPython中處理is與is not語(yǔ)句示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

起步

文檔中 https://docs.python.org/3.8/r... 表示對(duì)于 x is y 當(dāng)且僅當(dāng)兩個(gè)變量指向同一對(duì)象時(shí)才為真。對(duì)象可以通過(guò) id() 函數(shù)來(lái)查看它的身份(id() 函數(shù)返回了對(duì)象在內(nèi)存中的映射)。

is 與 is not 的字節(jié)碼

is 與 is not 都是操作符。 is not 是整體的,千萬(wàn)別把 x is not y 當(dāng)做是 x is (not y) 。

來(lái)看看這兩個(gè)操作符對(duì)應(yīng)的字節(jié)碼(基于 Python 3.8):

>>> def fun():
...   x is y
...   x is not y
... 
>>> import dis
>>> dis.dis(fun)
  2           0 LOAD_GLOBAL              0 (x)
              2 LOAD_GLOBAL              1 (y)
              4 COMPARE_OP               8 (is)
              6 POP_TOP
  3           8 LOAD_GLOBAL              0 (x)
             10 LOAD_GLOBAL              1 (y)
             12 COMPARE_OP               9 (is not)
             14 POP_TOP
             16 LOAD_CONST               0 (None)
             18 RETURN_VALUE
>>>

對(duì)于 COMPARE_OP 對(duì)應(yīng)的動(dòng)作

case TARGET(COMPARE_OP): {
    PyObject *right = POP();
    PyObject *left = TOP();
    PyObject *res = cmp_outcome(tstate, oparg, left, right);
    Py_DECREF(left);
    Py_DECREF(right);
    SET_TOP(res);
    if (res == NULL)
        goto error;
    PREDICT(POP_JUMP_IF_FALSE);
    PREDICT(POP_JUMP_IF_TRUE);
    DISPATCH();
}

這部分的代碼的含義是先將代對(duì)比的兩個(gè)操作數(shù)從棧中取出,通過(guò) cmp_outcome(tstate, oparg, left, right) 得到兩數(shù)的操作結(jié)果,再將結(jié)果 res 放入棧頂。

cmp_outcome 函數(shù)的相關(guān)代碼是:

static PyObject *
cmp_outcome(PyThreadState *tstate, int op, PyObject *v, PyObject *w)
{
    int res = 0;
    switch (op) {
    case PyCmp_IS:
        res = (v == w);
        break;
    case PyCmp_IS_NOT:
        res = (v != w);
        break;
        ...
    }
    v = res ? Py_True : Py_False;
    Py_INCREF(v);
    return v;
}

在 cmp_outcome() 函數(shù)中,僅通過(guò)對(duì)比兩個(gè)指針的值是否相等來(lái)判斷它們是否是指向同一對(duì)象。

純Python代碼解釋

通過(guò) id() 函數(shù)可以來(lái)判斷某一對(duì)象在內(nèi)存中對(duì)應(yīng)的地址,因此用它也可以來(lái)判斷兩個(gè)變量是否指向了同一對(duì)象:

def _is(a, b):
    return id(a) == id(b)

def _is_not(a, b):
    return id(a) != id(b)

以上就是CPython中處理is與is not語(yǔ)句示例詳解的詳細(xì)內(nèi)容,更多關(guān)于CPython處理is is not語(yǔ)句的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

瑞丽市| 江陵县| 拉孜县| 榆林市| 宁德市| 平遥县| 天全县| 康定县| 安阳市| 隆化县| 丹棱县| 铁岭县| 临潭县| 华容县| 晋江市| 巴马| 新宁县| 桓仁| 清丰县| 左云县| 德江县| 略阳县| 新密市| 扬中市| 崇阳县| 玛沁县| 忻州市| 镇坪县| 徐闻县| 潢川县| 诸暨市| 新邵县| 沛县| 周至县| 乌拉特中旗| 铜陵市| 修文县| 巩义市| 达拉特旗| 香河县| 浑源县|