[Python-Dev] Subtle difference between f-strings and str.format() (original) (raw)

Serhiy Storchaka storchaka at gmail.com
Wed Mar 28 14:54:51 EDT 2018


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



More information about the Python-Dev mailing list