If I understand correctly
myvar = a and b or c
gives the same result as
if a:
if b:
myvar = b
else:
myvar = c
else:
myvar = c
so I guess it's more elegant.
I seem to remember seeing this kind of short-circuit assignment statement in JavaScript code. But is it considered good style in Python to use short-circuiting in assignment statements?
Most of the time, you then want to use a conditional expression instead:
myvar = b if a else c
Short-circuiting is very Pythonic however, just be aware of the pitfalls where b
is false-y; using short-circuiting will result in different result in that case. Most of the time, you do not want to assign c
instead.
Even in that case, you can still get the same result with an adjusted condition:
myvar = b if a and b else c
Short-circuiting is great for defaults:
foo = somevar or 'bar'
or for making sure pre-conditions are met:
foo = somevar and function_raises_exception_if_passed_empty_value(somevar)
This is really an opinion question, but for the most part, the answer is no. It goes against multiple style guides, probably because people tend to think it means "if a is true, use the value of b, otherwise use the value of c" rather than the real meaning, which is what you posted.
You probably want the new-ish conditional expression syntax instead:
myvar = b if a else c
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With