亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中not?not?x?與bool(x)有哪些區別

發布時間:2021-12-21 10:42:51 來源:億速云 閱讀:137 作者:小新 欄目:開發技術

這篇文章主要介紹了python中not not x 與bool(x)有哪些區別,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

他們都可以把 x 變成一個布爾類型的值:

>>> x = 123
>>> not not x
True
>>> bool(x)
True
>>>

那么誰更快呢?我們寫段代碼,跑個 100 萬次,來比較下誰更快:

import timeit


def bool_convert(x):
    return bool(x)


def notnot_convert(x):
    return not not x


def main():
    trials = 10_000_000
    kwargs = {
        "setup": "x=42",
        "globals": globals(),
        "number": trials,
    }

    notnot_time = timeit.timeit("notnot_convert(x)", **kwargs)
    bool_time = timeit.timeit("bool_convert(x)", **kwargs)

    print(f"{bool_time = :.04f}")
    print(f"{notnot_time = :.04f}")


if __name__ == "__main__":
    main()

運行結果如下:

python中not?not?x?與bool(x)有哪些區別

其實 bool(x) 慢的原因在于它是一個函數調用,而 not not x 就是一條指令,具有更快捷的轉換為布爾值的路徑,這一點可以從字節碼可以看出來:

python中not?not?x?與bool(x)有哪些區別

bool(x) 多了 LOAD_GLOBAL CALL_FUNCTION

這里附一下相關字節碼的官方說明:

LOAD_GLOBAL(namei)
Loads the global named co_names[namei] onto the stack.

CALL_FUNCTION(argc)
Calls a callable object with positional arguments. argc indicates the number of positional arguments. The top of the stack contains positional arguments, with the right-most argument on top. Below the arguments is a callable object to call. CALL_FUNCTION pops all arguments and the callable object off the stack, calls the callable object with those arguments, and pushes the return value returned by the callable object.

UNARY_NOT
Implements TOS = not TOS.

最后:

從結果來看,not not x 比 bool(x) 更快,主要原因在于 bool(x) 是一個函數調用,函數調用需要參數壓入棧頂,堆棧的頂部包含位置參數,最右邊的參數在頂部,參數下面是要調用的可調用對象。CALL_FUNCTION 從堆棧中彈出所有參數和可調用對象,使用這些參數調用可調用對象,并推送可調用對象返回的返回值,這一過程比一個 not 指令要慢得多。

不過我仍然推薦你使用 bool(x) ,因為它的可讀性更高,而且,我們也不太可能調用它 100萬次。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“python中not not x 與bool(x)有哪些區別”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东莞市| 甘泉县| 遂昌县| 嘉鱼县| 长垣县| 金坛市| 台南县| 成都市| 山西省| 岗巴县| 西青区| 于都县| 托里县| 旌德县| 张家界市| 舞钢市| 商洛市| 中卫市| 新泰市| 通江县| 洛浦县| 克拉玛依市| 无锡市| 龙川县| 衡阳县| 南平市| 福安市| 繁峙县| 南木林县| 页游| 镇雄县| 龙南县| 西吉县| 内乡县| 民乐县| 商城县| 盘锦市| 宜州市| 福州市| 黎平县| 根河市|