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_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_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数据库
徐州智能化软件开发厂家直销
网络技术支持维护工作内容
信息中心网络安全使用者试题
苏州软件开发公司副总工资多少
帮帮你服务器关闭
河南惠普服务器维修调试多少钱
唯谛网络技术
摩尔庄园哪些服务器人气高
薛城市网络安全教育班
肖鹏超市采购数据库管理系统
小白鞋数据库
数据库超级用户授权
中学网络安全宣传周活动
东莞市科思达软件开发有限公司
电子发票服务器地址和端口怎么填
服务器开发要做什么
软件开发怎么自己做老板
我的世界存档怎么放到服务器
信息管理与数据库技术的优点
数据库如何传到服务器上
数据库关系最基本的要求
张家口软件开发简介
北京宏天软件开发公司