91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

普安县| 香河县| 建德市| 栾川县| 东明县| 东莞市| 磐石市| 玛沁县| 鲁山县| 咸阳市| 武山县| 周宁县| 邻水| 阿合奇县| 南乐县| 贵阳市| 介休市| 逊克县| 天长市| 双流县| 通江县| 墨竹工卡县| 东乡| 合作市| 海兴县| 霍州市| 南陵县| 平阴县| 宿松县| 阿克苏市| 长治市| 娱乐| 铜川市| 德清县| 呼和浩特市| 琼结县| 南昌县| 边坝县| 车致| 长岛县| 错那县|