我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python中notnotx与bool(x)的区别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python中notnotx与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()

运行结果如下:

其实 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) 的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python中notnotx与bool(x)的区别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

这篇文章主要介绍了python中not not x 与bool(x)有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。他们都可以把 x 变成一个布尔类型的值:>>> x
2023-06-22

c语言中x++与++x的区别

c 语言中 x++ 和 ++x 的区别在于操作时机和返回值:x++(后置递增):获取 x 原值后递增,返回原值。++x(前置递增):递增 x 后获取值,返回递增后的值。C 语言中 x++ 与 ++x 的区别在 C 语言中,x++ 和 ++
c语言中x++与++x的区别
2024-04-29

Python2.x与Python3.x的区别

Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。许多针对早期Python版本设计的程式都无法
2022-06-04

c语言中的x++与++x的区别

c语言中x++与++x的区别在于执行顺序:后置自增x++先算术运算再赋值,而前置自增++x先赋值再运算。使用x作为左操作数时结果相同,而作为右操作数时,因执行顺序差异,结果可能不同。C语言中x++与++x的区别x++和++x都是C语言中用
c语言中的x++与++x的区别
2024-04-29

x++与++x在c语言中的区别

x++ 和 ++x 都是 c 语言中的自增运算符,主要区别在于实现和返回结果:实现:x++ 先赋值后自增,++x 先自增后赋值。返回结果:x++ 返回递增前的原始值,++x 返回递增后的新值。x++ 与 ++x 在 C 语言中的区别前言x
x++与++x在c语言中的区别
2024-04-29

c语言中x++和x+的区别

x++和x+在c语言中的区别:x++:后增量运算符,先将x的值赋给表达式,再将x加1。x+:加法运算符,将x与指定值相加后将结果赋给表达式。C语言中x++和x+的区别x++和x+在C语言中是两个不同的运算符,它们对变量x的作用有所不同。
c语言中x++和x+的区别
2024-04-27

c语言中!x和x!的区别

c 语言中,!x 表示逻辑非运算,将真值转为假值,假值转为真值;x! 表示阶乘运算,计算指定数字的自然数乘积,x!语法通过预处理器宏实现,仅适用于非负整数。!x 与 x! 在 C 语言中的区别直接回答:!x 表示逻辑非运算,x! 表示阶
c语言中!x和x!的区别
2024-04-29

c语言中++x和x++的区别

c 语言中,++x(前缀自增)先增加变量值再赋值,x++(后缀自增)先赋值后再增加变量值;前者表达式值为 x + 1,后者为 x。C 语言中 ++x 和 x++ 的区别在 C 语言中,++x 和 x++ 都是后缀自增运算符,但它们在执行时
c语言中++x和x++的区别
2024-05-02

c语言中%x和%x的区别

c语言中,%x 以小写十六进制形式打印整数,%x 以大写十六进制形式打印整数。%x 和 %X 的区别在 C 语言中,%x 和 %X 都是格式化占位符,用于以十六进制形式打印整数。它们之间的主要区别是大小写。%x以小写十六进制形式打印整数
c语言中%x和%x的区别
2024-04-29

c语言中x--和--x的区别

c 语言中的后缀递减运算符 x-- 先返回未修改的 x 值,然后再递减它,而前缀递减运算符 --x 先递减 x 值,然后再将其赋给 x。C 语言中的 x-- 和 --x在 C 语言中,x-- 和 --x 都是递减运算符,用于将变量 x 减
c语言中x--和--x的区别
2024-04-29

c语言中--x和x--的区别

在 c 语言中,--x 和 x-- 都是递减运算符,用于将变量 x 减 1,区别在于执行递减的时间:--x(前置递减):递减前执行。x--(后置递减):递减后执行。何时使用:如果需要在递减之前使用变量,则使用 x--,否则使用 --x。C
c语言中--x和x--的区别
2024-05-02

Python中的 // 与 / 的区别

通常C/C++中,"/ " 算术运算符的计算结果是根据参与运算的两边的数据决定的,比如:  6 / 3 = 2 ; 6,3都是整数,那么结果也就是整数2;  6.0 / 3.0 = 2.0 ; 6.0,3.0是浮点数,那么结果也是浮点数2.
2023-01-31

python笔记之3.x与2.x的使用区

python目前有两个分支:2.7.3和3.3.0,基本用法大同小异,但在个别细节上还是有出入的,具体看python.org网站。个人感觉的差异有:1、py3默认就是unicode,终于在写程序时可以不用再考虑中文支持的问题。py3中字符串
2023-01-31

Python中bytes与str的区别

Python中bytes与str的区别主要是它们是两种不同的数据类型。bytes是二进制数据,而str是Unicode文本。在Python中,bytes是一个类型,用于代表字节串,是不可变序列,包含范围为0 <= x < 256的整数。bytes可以看做是bytearray的不可变版本,它同样支持索引和切片操作。
Python中bytes与str的区别
2023-10-29

python中TCP与UDP的区别

这篇文章将为大家详细讲解有关python中TCP与UDP的区别,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比
2023-06-14

Python中“is”与“==”的使用区别

“is”与“==”的主要区别:1、功能的区别;2、使用场景的区别;3、比较结果的区别;4、性能的区别;“is”通常用于比较变量与单例值(如None)的关系,或者比较两个同构对象是否为同一对象,而“==”通常用于比较两个变量的值是否相等,不考虑它们在内存中的位置。
Python中“is”与“==”的使用区别
2023-10-29

Python中is与==判断的区别

在 Python 中,比较两个对象(变量)是否相等,可以用 “is” 和 “==” 操作,但它俩有什么区别?什么时候用 “is”,什么时候用 “==” ?在面试时,发现不少候选人很难把这两者完全说清楚,因此在这篇文章中,「Python之禅」
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录