
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()