def test(x):
print("in test")
if x >0:
return 1
else:
None
def whennegative():
return 6
myval =test(3) if test(3) else whennegative()
Is there anyway do this one-line if-else without execute test twice? thanks
def test(x):
print("in test")
if x >0:
return 1
else:
None
def whennegative():
return 6
myval =test(3) if test(3) else whennegative()
Is there anyway do this one-line if-else without execute test twice? thanks
What you're writing can be summarized as "Do test(3)
if it works, and if it doesn't, then here's a fallback". Put another way, that can be summarized as "Do test(3)
, or else do the fallback".
myval = test(3) or whennegative()
If test(3)
is truthy, it'll short circuit out. Otherwise, it'll evaluate whennegative()
.
There are people who will argue that this is too short and clever, and it can certainly be overused (if you ever see a = (b and c) or d
then you've gone too far). But a single or
in assignment to mean "here's a fallback" or a single and
to mean "here's a point of failure" is pretty well understood by folks and is, indeed, more concise than the ternary alternative.