返回顶部
首页 > 资讯 > 后端开发 > Python >python中notnotx与bool(x)的区别
  • 574
分享到

python中notnotx与bool(x)的区别

2024-04-02 19:04:59 574人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

他们都可以把 x 变成一个布尔类型的值: >>> x = 123 >>> not not x True >>> bool(

他们都可以把 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()

运行结果如下:

其实 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_NOT
Implements TOS = not TOS.


最后:

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

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

到此这篇关于pythonnot not x 与 bool(x) 的区别的文章就介绍到这了,更多相关not not x与bool(x) 的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python中notnotx与bool(x)的区别

本文链接: https://lsjlt.com/news/160422.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python中notnotx与bool(x)的区别
    他们都可以把 x 变成一个布尔类型的值: >>> x = 123 >>> not not x True >>> bool(...
    99+
    2024-04-02
  • python中not not x 与bool(x)有哪些区别
    这篇文章主要介绍了python中not not x 与bool(x)有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。他们都可以把 x 变...
    99+
    2023-06-22
  • c语言中x++与++x的区别
    c 语言中 x++ 和 ++x 的区别在于操作时机和返回值:x++(后置递增):获取 x 原值后递增,返回原值。++x(前置递增):递增 x 后获取值,返回递增后的值。 C 语言中 x...
    99+
    2024-04-29
    c语言
  • c语言中的x++与++x的区别
    c语言中x++与++x的区别在于执行顺序:后置自增x++先算术运算再赋值,而前置自增++x先赋值再运算。使用x作为左操作数时结果相同,而作为右操作数时,因执行顺序差异,结果可能不同。 ...
    99+
    2024-04-29
    c语言
  • Python2.x与Python3.x的区别
    Python的3​​.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的...
    99+
    2022-06-04
    区别
  • x++与++x在c语言中的区别
    x++ 和 ++x 都是 c 语言中的自增运算符,主要区别在于实现和返回结果:实现:x++ 先赋值后自增,++x 先自增后赋值。返回结果:x++ 返回递增前的原始值,++x 返回递增后的...
    99+
    2024-04-29
    c语言
  • Python2.x与3.x版本区别
                              Python2.x与3.x版本区别   Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。    为了不带入过多的...
    99+
    2023-01-31
    区别 版本
  • Python2.x与3​​.x版本区别
    Python 3.0的变化主要在以下几个方面: print 函数 print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2...
    99+
    2023-01-31
    区别 版本
  • Vue2.x与Vue3.x中路由钩子的区别详解
    目录vue2.x前置概念:路由钩子分类路由和组件的概念(方便理解钩子函数)全局路由钩子路由配置守卫钩子组件内的守卫钩子路由钩子执行顺序eg: 从A组件跳转到B组件顺序如果B路有更新,...
    99+
    2024-04-02
  • c语言中x++和x+的区别
    x++和x+在c语言中的区别:x++:后增量运算符,先将x的值赋给表达式,再将x加1。x+:加法运算符,将x与指定值相加后将结果赋给表达式。 C语言中x++和x+的区别 x++和x+在...
    99+
    2024-04-27
    c语言
  • c语言中!x和x!的区别
    c 语言中,!x 表示逻辑非运算,将真值转为假值,假值转为真值;x! 表示阶乘运算,计算指定数字的自然数乘积,x!语法通过预处理器宏实现,仅适用于非负整数。 !x 与 x! 在 C 语...
    99+
    2024-04-29
    c语言
  • c语言中%x和%x的区别
    c语言中,%x 以小写十六进制形式打印整数,%x 以大写十六进制形式打印整数。 %x 和 %X 的区别 在 C 语言中,%x 和 %X 都是格式化占位符,用于以十六进制形式打印整数。它...
    99+
    2024-04-29
    c语言
  • c语言中x--和--x的区别
    c 语言中的后缀递减运算符 x-- 先返回未修改的 x 值,然后再递减它,而前缀递减运算符 --x 先递减 x 值,然后再将其赋给 x。 C 语言中的 x-- 和 --x 在 C 语言...
    99+
    2024-04-29
    c语言
  • c语言中++x和x++的区别
    c 语言中,++x(前缀自增)先增加变量值再赋值,x++(后缀自增)先赋值后再增加变量值;前者表达式值为 x + 1,后者为 x。 C 语言中 ++x 和 x++ 的区别 在 C 语言...
    99+
    2024-05-02
    c语言
  • c语言中--x和x--的区别
    在 c 语言中,--x 和 x-- 都是递减运算符,用于将变量 x 减 1,区别在于执行递减的时间:--x(前置递减):递减前执行。x--(后置递减):递减后执行。何时使用:如果需要在递...
    99+
    2024-05-02
    c语言
  • python中/与//的区别
    python中“/”表示为浮点数的除法,其返回结果为浮点数;而“//”表示的是整数除法,其返回结果为整数。实例:print("6 // 4 = " + str(6 // 4))print("6 / 4 =" + str(6 / 4))输出结...
    99+
    2024-04-02
  • Python中的 // 与 / 的区别
    通常C/C++中,"/ " 算术运算符的计算结果是根据参与运算的两边的数据决定的,比如:  6 / 3 = 2 ; 6,3都是整数,那么结果也就是整数2;  6.0 / 3.0 = 2.0 ; 6.0,3.0是浮点数,那么结果也是浮点数2...
    99+
    2023-01-31
    区别 Python
  • python笔记之3.x与2.x的使用区
    python目前有两个分支:2.7.3和3.3.0,基本用法大同小异,但在个别细节上还是有出入的,具体看python.org网站。 个人感觉的差异有: 1、py3默认就是unicode,终于在写程序时可以不用再考虑中文...
    99+
    2023-01-31
    笔记 python
  • python中TCP与UDP的区别
    这篇文章将为大家详细讲解有关python中TCP与UDP的区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比...
    99+
    2023-06-14
  • Python中bytes与str的区别
    一、两种不同的数据类型 bytes是二进制数据,而str是Unicode文本。 在Python中,bytes是一个类型,用于代表字节串,是不可变序列,包含范围为0 <= x < 256的整数。bytes可以看做是bytearra...
    99+
    2023-10-29
    区别 Python bytes
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作