return
-satser i samtliga villkorsgrenar av en if
-sats blir en avslutande else
-sats alltid överflödig, eftersom det enda sätt som exekveringen kan fortsätta efter hela if
-strukturen är ifall samtliga villkor är ouppfyllda, då return
precis som du säger avbryter funktionen. I övriga fall (utan return
) måste man givetvis hantera alla grenar, i och med att exekveringen då bara fortsätter.Exempel:
- Kod: Markera allt
def foo(bar):
if bar == 1:
# gren 1
return "ett"
elif bar == 2:
# gren 2
return "två"
else:
# gren 3
return "annat"
print(foo(1)) # gren 1 exekveras: "ett"
print(foo(2)) # gren 2 exekveras: "två"
print(foo(3)) # gren 3 exekveras: "annat"
- Kod: Markera allt
def foo2(bar):
if bar == 1:
# gren 1
return "ett"
elif bar == 2:
# gren 2
return "två"
# standardbeteende när inget villkor är uppfyllt
return "annat"
print(foo2(1)) # gren 1 exekveras: "ett"
print(foo2(2)) # gren 2 exekveras: "två"
print(foo2(3)) # ingen gren exekveras: "annat"
Som synes påverkar
else
-satsen inte logiken här, utan utgör enligt lintreglerna endast en onödig syntaktisk konstruktion. Se det som att du först sätter upp villkor för att fånga de fall du är intresserad av att särbehandla och sedan avslutar med att hantera "alla övriga fall" utanför if
-konstruktionen. Om du vill "göra mer" är det bara att göra det, oavsett var någonstans koden befinner sig -- det viktiga är att du har koll på det logiska flödet.