28.03.18 21:30, Tim Peters пише:

[Tim]
I have a hard time imaging how that could have come to be, but if it's
true I'd say the unoptimized code was plain wrong.  The dumbest
possible way to implement `f() and g()` is also the correct ;-) way:

result = f()
if not bool(result):
     result = g()
Heh - that's entirely wrong, isn't it?  That's how `or` is implemented ;-)

Same top-level point, though:

result = f()
if bool(result):
     result = g()

Optimized

    if f() and g():
        spam()

is equivalent to

    result = f()
    if bool(result):
        result = g()
        if bool(result):
            spam()

Without optimization it would be equivalent to

    result = f()
    if bool(result):
        result = g()
    if bool(result):
        spam()

It calls bool() for the result of f() twice if it is false.

Thus there is a small difference between

    if f() and g():
        spam()

and

    tmp = f() and g()
    if tmp:
        spam()

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to