Easy function, please help.
Terry Reedy
tjreedy at udel.edu
Thu Feb 10 12:01:57 EST 2011
On 2/10/2011 11:52 AM, Ethan Furman wrote:
> Jason Swails wrote:
>> How is "while n != 0:" any worse?
1. It is redundant, just like 'if bool_value is not False:'.
Python programmers should understand the null value idiom.
2. It does 2 comparisons, 1 unneeded, instead of 1. For CPython,
it adds 2 unnecessary bytecode instructions and takes longer.
>>> from dis import dis
>>> def f(n):
while n: pass
>>> dis(f)
2 0 SETUP_LOOP 10 (to 13)
>> 3 LOAD_FAST 0 (n)
6 POP_JUMP_IF_FALSE 12
9 JUMP_ABSOLUTE 3
>> 12 POP_BLOCK
>> 13 LOAD_CONST 0 (None)
16 RETURN_VALUE
>>> def f(n):
while n != 0: pass
>>> dis(f)
2 0 SETUP_LOOP 16 (to 19)
>> 3 LOAD_FAST 0 (n)
6 LOAD_CONST 1 (0)
9 COMPARE_OP 3 (!=)
12 POP_JUMP_IF_FALSE 18
15 JUMP_ABSOLUTE 3
>> 18 POP_BLOCK
>> 19 LOAD_CONST 0 (None)
22 RETURN_VALUE
>> It has exactly the same effect without adding any code
Untrue, see above.
--
Terry Jan Reedy
More information about the Python-list
mailing list