pointless musings on performance

Chris Rebert clp2 at rebertia.com
Tue Nov 24 07:43:50 EST 2009


On Tue, Nov 24, 2009 at 4:31 AM, Rob Williscroft <rtw at freenet.co.uk> wrote:
> mk wrote in news:mailman.915.1259064240.2873.python-list at python.org in
> comp.lang.python:
>
>>
>> def pythonic():
>
>> def unpythonic():
>
>
>> Decidedly counterintuitive: are there special optimizations for "if
>> nonevar:" type of statements in cpython implementation?
>>
>
> from dis import dis
>
> dis( unpythonic )
>
> 18          31 LOAD_FAST                0 (nonevar)
>             34 LOAD_CONST               0 (None)
>             37 COMPARE_OP               9 (is not)
>             40 JUMP_IF_FALSE            4 (to 47)
>
> dis( pythonic )
>
> 11          31 LOAD_FAST                0 (nonevar)
>             34 JUMP_IF_FALSE            4 (to 41)

In other words, CPython doesn't happen to optimize `if nonevar is not
None` as much as it theoretically could (which would essentially
require a JUMP_IF_NONE opcode). Since CPython isn't known for doing
fancy optimizations, this isn't surprising.

Cheers,
Chris
--
http://blog.rebertia.com



More information about the Python-list mailing list