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