【发布时间】:2020-01-15 22:35:50
【问题描述】:
考虑一下:
>>> from timeit import timeit
>>> timeit('x = 1; t = bool(x)')
0.08783805199999506
>>> timeit('x = 1; t = not not x')
0.018457599000015534
现在我知道函数调用通常会给您带来开销,但通常情况下,编译器和解释器会优化小的常见情况(例如这个)。
那么这里到底发生了什么?
【问题讨论】:
-
这是 Python 和特定调用的工件。这在许多静态编译的语言中并不成立(或者更确切地说,推理会更明显)。两件事情。 1、
bool(..)接受可以做什么?这与 not 运算符有何不同? 2. 比较内在运算符与“调用”。 -
查看为
t = bool(x)和t = not not x生成的代码。 -
这让我查看了
bool源代码。这是幕后github.com/python/cpython/blob/master/Objects/boolobject.c