[Python-ideas] Python docs page: In what ways is None special
Chris Angelico
rosuav at gmail.com
Thu Jul 26 19:27:33 EDT 2018
On Fri, Jul 27, 2018 at 9:20 AM, Michael Selik <mike at selik.org> wrote:
> On Mon, Jul 23, 2018 at 2:03 AM Jonathan Fine <jfine2358 at gmail.com> wrote:
>>
>> Thank you for your attention. What have I missed?
>
>
> None and a few other things are special-cased by CPython. The compiler won't
> bother to write bytecode instructions when an if-statement obviously
> evaluates false. That might surprise some folks.
>
> In [1]: import dis
>
> In [2]: def foo():
> ...: if None:
> ...: print(1)
> ...: if 0:
> ...: print(2)
> ...: if 'a' == 'b':
> ...: print(3)
> ...:
>
> In [3]: dis.dis(foo)
> 6 0 LOAD_CONST 1 ('a')
> 2 LOAD_CONST 2 ('b')
> 4 COMPARE_OP 2 (==)
> 6 POP_JUMP_IF_FALSE 16
>
> 7 8 LOAD_GLOBAL 0 (print)
> 10 LOAD_CONST 3 (3)
> 12 CALL_FUNCTION 1
> 14 POP_TOP
> >> 16 LOAD_CONST 0 (None)
> 18 RETURN_VALUE
>
That's true of ANY constant, though. And a future version of Python
could well constant-fold the comparison, and thus optimize out the
third condition too. There's nothing special about None here.
ChrisA
More information about the Python-ideas
mailing list