千家信息网

python中not not x 与bool(x)有哪些区别

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍了python中not not x 与bool(x)有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。他们都可以
千家信息网最后更新 2025年11月09日python中not not x 与bool(x)有哪些区别

这篇文章主要介绍了python中not not x 与bool(x)有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

他们都可以把 x 变成一个布尔类型的值:

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

那么谁更快呢?我们写段代码,跑个 100 万次,来比较下谁更快:

import timeitdef bool_convert(x):    return bool(x)def notnot_convert(x):    return not not xdef 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()

运行结果如下:

其实 bool(x) 慢的原因在于它是一个函数调用,而 not not x 就是一条指令,具有更快捷的转换为布尔值的路径,这一点可以从字节码可以看出来:

bool(x) 多了 LOAD_GLOBALCALL_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_NOTImplements TOS = not TOS.

最后:

从结果来看,not not x 比 bool(x) 更快,主要原因在于 bool(x) 是一个函数调用,函数调用需要参数压入栈顶,堆栈的顶部包含位置参数,最右边的参数在顶部,参数下面是要调用的可调用对象。CALL_FUNCTION 从堆栈中弹出所有参数和可调用对象,使用这些参数调用可调用对象,并推送可调用对象返回的返回值,这一过程比一个 not 指令要慢得多。

不过我仍然推荐你使用 bool(x) ,因为它的可读性更高,而且,我们也不太可能调用它 100万次。

感谢你能够认真阅读完这篇文章,希望小编分享的"python中not not x 与bool(x)有哪些区别"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

参数 对象 篇文章 可调 函数 更快 原因 堆栈 字节 布尔 指令 结果 顶部 代码 价值 位置 兴趣 可读性 右边 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎样提高个人网络安全 有两个组怎么输入数据库 sci网络安全在职研究生 武汉软件开发收入 数据库技术从事的工作 omegaT数据库 易安卓能不能用edb数据库 徐州智能化软件开发厂家直销 网络技术支持维护工作内容 信息中心网络安全使用者试题 苏州软件开发公司副总工资多少 帮帮你服务器关闭 河南惠普服务器维修调试多少钱 唯谛网络技术 摩尔庄园哪些服务器人气高 薛城市网络安全教育班 肖鹏超市采购数据库管理系统 小白鞋数据库 数据库超级用户授权 中学网络安全宣传周活动 东莞市科思达软件开发有限公司 电子发票服务器地址和端口怎么填 服务器开发要做什么 软件开发怎么自己做老板 我的世界存档怎么放到服务器 信息管理与数据库技术的优点 数据库如何传到服务器上 数据库关系最基本的要求 张家口软件开发简介 北京宏天软件开发公司
0