千家信息网

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

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍了python中not not x 与bool(x)有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。他们都可以
千家信息网最后更新 2025年02月02日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安全错误 数据库的锁怎样保障安全 慕课计算机网络技术期末考试 湛江市芝麻互联网科技公司 广州亿润网络技术有限公司 mmo游戏服务器优化 贺州市黄强宗网络安全 阴阳师大区服务器在什么位置 银行软件开发岗是正式合同工吗 无忧软件开发 福州地铁网络安全 惠山区计算机网络技术口碑推荐 第二届民航网络技术员大赛 将管理系统放到云服务器上 网络安全毕业生薪资 数据库 软件 硬件 如皋网络安全 冰峰网络安全科技馆 华南科技大学网络安全 计算机网络技术信息安全方向就业 数据库转储是什么意思 会计信息系统数据库依据什么设立 obs服务器 金华米粒网络技术服务公司 虚拟机怎么设置成本地服务器 南京hpe塑合型服务器厂家 上海亿朵网络技术有限公司 怎么通过数据库判断学术高低 数据库技术中的关键技术 杭州复翼软件开发年报 闵行区会议视频系统服务器 数据库新技术项目报告
0