Die if-else-Anweisung in Python (zu Deutsch: „wenn-(dann)-ansonsten“) ist eine kon­di­tio­nel­le Ver­zwei­gung und damit eine grund­le­gen­de Kon­troll­struk­tur. Die Nutzung einer Ver­zwei­gung erlaubt, ab­wei­chen­de Code-Pfade je nach einer zur Laufzeit an­zu­tref­fen­der Bedingung zu be­schrei­ten. Wir erklären, wie if-else in Python funk­tio­niert und ein­ge­setzt wird.

SSL-Zer­ti­fi­kat kaufen
Sichern Sie sich Ihr SSL-Zer­ti­fi­kat
  • Ver­schlüs­selt die Website-Kom­mu­ni­ka­ti­on
  • Ver­hin­dert Si­cher­heits­war­nun­gen
  • Ver­bes­sert die Google-Plat­zie­rung

Was ist eine if-else-Anweisung?

Bei der if-else-Anweisung handelt es sich um eine kon­di­tio­nel­le Ver­zwei­gung. Vor­stel­len kann man sich das wie eine Weiche: In Ab­hän­gig­keit von einem Schalt­ele­ment wird von zwei möglichen Wegen aus­schließ­lich einer be­schrit­ten. Python ist eine in­ter­pre­tier­te Sprache; der In­ter­pre­ter liest Zeilen des Quell­codes von oben nach unten ab. Im ein­fachs­ten Fall ergibt sich ein strikt linearer Pro­gramm­fluss: Alle Zeilen werden nach­ein­an­der gelesen, in­ter­pre­tiert und aus­ge­führt.

Diesem simplen Schema folgend sind jedoch keine komplexen Programme möglich. Erst durch den Einsatz von Kon­troll­struk­tu­ren ergibt sich die im prak­ti­schen Einsatz benötigte Va­ria­bi­li­tät des aus­ge­führ­ten Codes. Eine Ver­zwei­gung erlaubt die kon­di­tio­nel­le Aus­füh­rung be­stimm­ter Code-Teile. Als weitere Kon­troll­struk­tu­ren kommen ins­be­son­de­re Python-for-Schleifen und Pyhton-while-Schleifen zum Einsatz, die die wie­der­hol­te Aus­füh­rung von Code-Teilen er­mög­li­chen.

Tipp

Lernen Sie, Python-Code zu schreiben – mit unserem Python-Tutorial!

Wie funk­tio­niert if-else in Python?

Generell verhält sich die if-else-Anweisung in Python ähnlich wie aus anderen Sprachen bekannt. Es gibt jedoch einige Python-spe­zi­fi­sche Be­son­der­hei­ten. Schauen wir uns im Detail an, wie die if-else-Anweisung in Python funk­tio­niert und wie sie sich im Gegensatz zu anderen Sprachen verhält.

Generelle Syntax der if-else-Anweisung in Python

Die generelle Syntax der if-else-Anweisung in Python lässt sich direkt in Python-Code aus­drü­cken. Wir de­fi­nie­ren eine Kondition und legen im Körper der if-Anweisung bei­spiels­hal­ber einen Funk­ti­ons­auf­ruf als Code-Pfad fest, der be­schrit­ten wird, wenn die Kondition wahr wird. Ferner legen wir im else-Körper einen Code-Pfad fest, der an­dern­falls be­schrit­ten wird:

if condition:
    if_body()
else:
    else_body()

Die de­fi­nier­te Kondition kann entweder wahr sein (True) oder nicht wahr (False). Wir ver­deut­li­chen das Muster, indem wir das Literal True oder False direkt als Kondition eintragen. Es ergibt sich ein sta­ti­scher Pro­gramm­fluss, bei dem ga­ran­tiert jeweils nur einer der beiden Pfade be­schrit­ten wird:

if False:
    # dieser Code wird nie ausgeführt
    if_body()
else:
    else_body()
if True:
    if_body()
else:
    # dieser Code wird nie ausgeführt
    else_body()

Selbst­ver­ständ­lich ist dieses Muster nicht praktisch, sondern dient nur zum Ver­an­schau­li­chen. Anstelle eines sta­ti­schen True/False-Wertes kommt als Kondition ein Ausdruck zum Einsatz. Der Ausdruck wird zur Laufzeit des Programms aus­ge­wer­tet. Man spricht davon, dass der Ausdruck „evaluiert“ wird. Beim Eva­lu­ie­ren des Ausdrucks ergibt sich ein Wahr­heits­wert. Je nachdem, ob als Wahr­heits­wert True oder False her­aus­kommt, verzweigt das Programm in die eine oder die andere Richtung.

Wichtig zu verstehen ist, dass der else-Teil optional ist. Der im else-Körper be­find­li­che Code wird nur aus­ge­führt, wenn die Kondition nicht zutrifft. Dies ist jedoch nicht zwingend notwendig. Oft genügt eine al­lein­ste­hen­de if-Anweisung:

if condition:
    if_body()

Ein kleiner Hinweis zur No­men­kla­tur: Wir haben die Begriffe „Anweisung“ und „Ausdruck“ benutzt, ohne diese zu erklären. Dabei ist es durchaus wichtig, zu verstehen, was damit gemeint ist. Denn diese beiden grund­le­gen­de Begriffe ziehen sich durch sämtliche Pro­gram­mier­spra­chen. Hier die Bedeutung der Begriffe im Überblick:

Begriff Englische Ent­spre­chung Er­läu­te­rung
Anweisung Statement Aktion, die aus­ge­führt wird; be­ein­flusst in der Regel den Pro­gramm­ver­lauf
Ausdruck Ex­pres­si­on Term, der beim Eva­lu­ie­ren einen Wert zu­rück­gibt

Mit der elif-Anweisung in Python mehrere exklusive Kon­di­tio­nen abfragen

Neben der bekannten if-else-Anweisung existiert in Python die verwandte elif-Anweisung. Auf eine if-Anweisung folgen optional mehrere elif-An­wei­sun­gen, gefolgt von einem op­tio­na­len else-Block. Eine elif-Anweisung wird nur dann aus­ge­führt, wenn keine der vor­ge­schal­te­ten Kon­di­tio­nen wahr geworden ist. So wird ga­ran­tiert, dass aus­schließ­lich ein einzelner de­fi­nier­ter Code-Pfad be­schrit­ten wird:

if condition:
    if_body()
elif other_condition:
    elif_body()
elif another_condition:
    another_elif_body()
else:
    else_body()

Hier die Regeln für den Aufbau einer ver­ket­te­ten if-elif-else-Ver­zwei­gung:

Ver­zwei­gungs-Anweisung Anzahl in Kom­bi­na­ti­on
if genau eine
elif null oder mehrere
else null oder eine

Wie wird if-else in Python genutzt?

Die if-else-Anweisung ist in Python wie in anderen Sprachen eine grund­le­gen­de Funk­tio­na­li­tät. Na­tur­ge­mäß gibt es viele ver­schie­de­ne Ein­satz­mög­lich­kei­ten. Wir zeigen häufig an­zu­tref­fen­de Beispiele inklusive Best Practices und Anti-Patterns.

Korrekte Nutzung der if-Kondition in Python

Schauen wir uns zunächst an, wie die Kondition einer Ver­zwei­gungs-Anweisung funk­tio­niert. Die Kondition wird als boole­scher Ausdruck in­ter­pre­tiert, der zu einem der Wahr­heits­wer­te True oder False evaluiert. Es ist daher unnötig, explizit auf Gleich­heit mit einem boole­schen Literal zu testen:

if expression == True:
    ...

Auch wenn es sich beim ex­pli­zi­ten Abgleich mit True nicht um einen echten Fehler handelt, wirkt der Code un­pro­fes­sio­nell. Erfahrene Pro­gram­mie­rer schreiben statt­des­sen:

if expression:
    ...

Schauen wir uns das Anti-Pattern an einem Beispiel an. Nehmen wir an, dass eine Funktion is_odd() für eine Zahl True zu­rück­gibt, wenn die Zahl ungerade ist. An­dern­falls gibt die is_odd-Funktion False zurück. Wir nutzen die Funktion innerhalb einer if-Anweisung und geben einen ent­spre­chen­den Text aus:

if is_odd(number) == True:
    print("The number is odd.")

Stellen wir uns vor, was beim Durch­lau­fen der Ver­zwei­gung mit einer ungeraden Zahl passiert. Zunächst evaluiert der Ausdruck 'is_odd(number) == True' zu 'True == True'. Letzterer evaluiert wiederum zu 'True'; der if-Körper wird aus­ge­führt. Sinn­vol­ler ist, den von der is_odd-Funktion zu­rück­ge­ge­be­nen boole­schen Wert direkt als Kondition zu nutzen:

if is_odd(number):
    print("The number is odd.")

Op­tio­na­len Code mit if-Anweisung in Python ausführen

Stellen wir uns die folgende Situation vor: Wir haben einen Code-Block mit be­stimm­ter Funktion. Die Zeilen werden nach­ein­an­der aus­ge­führt. Jedoch soll ein Be­stand­teil des Codes nicht immer aus­ge­führt werden, sondern nur dann, wenn eine Bedingung zutrifft. Um dieses Muster um­zu­set­zen, benötigen wir lediglich eine if-Anweisung. Hier dar­ge­stellt am Beispiel einer Nut­zer­re­gis­trie­rungs-Routine:

def register_user(user_data, do_newsletter_signup = False):
    # create user account
    user_account = create_account(user_data)
    # sign up for newsletter — only if requested by user
    if do_newsletter_signup:
        signup_newsletter(user_account)
    # send confirmation mail
    send_confirmation_mail(user_account)

Zwei distinkte Fälle mit if-else-Anweisung in Python un­ter­schei­den

Häufig müssen Programme zwischen zwei sich ge­gen­sei­tig aus­schlie­ßen­den Fällen un­ter­schei­den. Wenn sich logisch er­schließt, dass es keine weiteren Fälle geben kann, ist es sinnvoll, eine if-else-Anweisung ein­zu­set­zen. Wir testen ex­em­pla­risch, ob eine Person ein be­stimm­tes Alter erreicht hat, und geben jeweils ein passendes Ergebnis aus:

def is_of_age(person, age_limit = 18):
    if person.age >= age_limit:
        print("You're old enough")
    else:
        print("Sorry, wait some more")

Mehrere exklusive Fälle mit elif-An­wei­sun­gen in Python un­ter­schei­den

Gibt es mehr als zwei sich ge­gen­sei­tig aus­schlie­ßen­de Fälle, zwischen denen wir un­ter­schei­den möchten, kommen ver­ket­te­te elif-An­wei­sun­gen zum Einsatz. Ein ab­schlie­ßen­des else dient dazu, un­be­kann­te Variation zu fangen. Wir ordnen Län­der­na­men den kor­re­spon­die­ren­den Länder-Codes zu:

def get_country_from_code(country_code):
    if country_code == 'DE':
        country = "Deutschland"
    elif country_code == 'ES':
        country = "España"
    elif country_code == 'FR':
        country = "France"
    elif country_code == 'GB':
        country = "Great Britain"
    elif country_code == 'IT':
        country = "Italia"
    else:
        country = None
    return country

Sofern sich die elif-Kette innerhalb einer Funktion befindet, ist es manchmal besser, mehrere un­ab­hän­gi­ge if-An­wei­sun­gen zu nutzen. So sparen wir uns die Zuweisung im elif-Körper. Mittels der return-Anweisung verlassen wir die Funktion, wenn eine der Be­din­gun­gen wahr wird. Statt dem ab­schlie­ßen­den else kommt eine zuletzt stehende return-Anweisung zum Einsatz, die nur erreicht wird, wenn keine der Kon­di­tio­nen True war:

def get_country_from_code(country_code):
    if country_code == 'DE':
        return "Deutschland"
    if country_code == 'ES':
        return "España"
    if country_code == 'FR':
        return "France"
    if country_code == 'GB':
        return "Great Britain"
    if country_code == 'IT':
        return "Italia"
    return None

Ver­ket­te­te elif-An­wei­sun­gen sind ein bekanntes Muster älterer Sprachen. In Python ist es oft direkter, ein „Dic­tion­a­ry Lookup“ zu verwenden. Wir de­fi­nie­ren die Zuordnung der Codes zu den Län­der­na­men direkt und ex­tra­hie­ren den Namen anhand des Codes. Anstatt des ab­schlie­ßen­den else nutzen wir die ein­ge­bau­te get-Methode, die als zweiten Parameter einen Default-Wert ent­ge­gen­nimmt:

def get_country_from_code(country_code):
    countries = {
        'DE': "Deutschland",
        'ES': "España",
        'FR': "France",
        'GB': "Great Britain",
        'IT': "Italia",
    }
    country = countries.get(country_code, None)
    return country

Mit der if-Anweisung in Python über­prü­fen, ob ein Objekt Daten enthält

Python ist eine dynamisch und lose ty­pi­sier­te Sprache. Statt an Variablen sind Typen an Werte gebunden. Je nach Einsatz finden ggf. implizite Kon­ver­sio­nen zwischen Typen statt. Im Kontext der boole­schen Ausdrücke spricht man in Er­wei­te­rung der Wahr­heits­wer­te True und False auch von „truthy“ und „falsy“.

Das bedeutet, dass die Kondition einer if-Anweisung in Python nicht explizit zu True oder False eva­lu­ie­ren muss. Vielmehr können Werte anderer Typen als Kondition zum Einsatz kommen. Diese werden be­stimm­ten Regeln folgend als boolesche Werte in­ter­pre­tiert.

Zitat

„Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean ope­ra­ti­ons […]

[...] An object is con­side­red true unless its class defines either a __bool__() method that returns False or a __len__() method that returns zero [...]“ – Quelle: https://docs.python.org/3/library/stdtypes.html#truth-value-testing

Über­set­zung: „Jedes Objekt lässt sich auf seinen Wahr­heits­wert testen, um diesen in einer if- oder while-Anweisung oder in einer der boole­schen Ope­ra­tio­nen zu nutzen [...]

[...] Ein Objekt wird als wahr bewertet, es sei denn, es definiert entweder eine __bool__()-Methode, die False zu­rück­gibt oder eine __len__()-Methode, die null zu­rück­gibt [...]“ (übersetzt von IONOS)

Wir machen uns dieses Muster zunutze, um zu über­prü­fen, ob ein Objekt Daten enthält. Da der folgende Text leer ist, wird eine ent­spre­chen­de Meldung aus­ge­ge­ben:

text = ''
if not text:
    print("No text given")

Die folgenden Objekte eva­lu­ie­ren im boole­schen Kontext zu False und werden daher als „falsy“ be­zeich­net:

Objekt Er­läu­te­rung
False, None Kon­stan­ten, die der De­fi­ni­ti­on nach False sind
0, 0.0, Decimal(0), Fraction(0, 1), etc. Zahl, die null re­prä­sen­tiert
'', (), [], {}, set(), range(0), etc. Leere Sequenz oder Kol­lek­ti­on

Ein weiteres Beispiel mit einer leeren Liste:

books_in_library = []
if not books_in_library:
    print("Library is empty")

Alle anderen Objekte eva­lu­ie­ren zu True:

number = 42
if number:
    print("Number exist")

Binären Schalter mit if-else in Python im­ple­men­tie­ren

Auch zum Hin- und Her­schal­ten zwischen zwei ex­klu­si­ven Zuständen kommt eine if-else-Anweisung zum Einsatz. Das Prinzip ähnelt einem Licht­schal­ter und wird im Eng­li­schen als „Toggle“ be­zeich­net. Wir de­fi­nie­ren eine Funktion, die den Zustand eines Lichts umdreht:

def toggle_light(light):
    if light == 'on':
        return 'off'
    else:
        return 'on'

Viel­leicht sehen Sie es bereits: Das geht noch einfacher. Sofern der Zustand nicht als String, sondern als boole­scher Wert re­prä­sen­tiert wird, bietet sich an, komplett auf die if-Anweisung zu ver­zich­ten. Statt­des­sen nutzen wir den logischen NICHT-Operator, um den boole­schen Wert um­zu­dre­hen:

def toggle(boolean):
    return not boolean

Mit Early Return ver­schach­tel­te if-An­wei­sun­gen in Python auflösen

In der Praxis ist es üblich, be­stimm­ten Code aus­zu­füh­ren, wenn mehrere Kon­di­tio­nen gleich­zei­tig wahr werden. Dies führt bei un­er­fah­re­nen Pro­gram­mie­rern schnell zu ver­schach­tel­ten if-An­wei­sun­gen. Jedoch handelt es sich dabei um schlech­ten Stil. Denn tief ver­schach­tel­te Ver­zwei­gun­gen lassen sich schwer über­bli­cken und schlecht warten.

Be­trach­ten wir ein Beispiel: Wir schreiben eine Funktion, die die Aussage darüber wie­der­gibt, ob eine Person wählen darf. Wir über­prü­fen zunächst, ob die Person ein Aus­weis­do­ku­ment hat. Im Anschluss über­prü­fen wir, ob die Person das Wahlalter bereits erreicht hat. Eine erste Im­ple­men­ta­ti­on der Funktion enthält ver­schach­tel­te if-An­wei­sun­gen:

def person_may_vote(person, voting_age = 18):
    if person.has_id():
        if person.get_age() >= voting_age:
            return True

Ein un­mit­tel­ba­res Problem dieser Im­ple­men­ta­ti­on ist, dass der wich­tigs­te Code weiter ein­ge­rückt wird, je mehr Be­din­gun­gen getestet werden. Zum Auflösen ver­schach­tel­ter if-An­wei­sun­gen kommt die Best Practice des „Early Return“ zum Einsatz. Dabei über­prü­fen wir am Anfang der Funktion, ob die einzelnen Be­din­gun­gen erfüllt sind. Ist eine Bedingung nicht erfüllt, brechen wir ab und verlassen die Funktion unter Nutzung der return-Anweisung.

Wir for­mu­lie­ren unsere Funktion neu, um Early Returns zu nutzen. Häufig erfordert dies, die vorher de­fi­nier­ten Be­din­gun­gen um­zu­keh­ren. Hilfreich ist dabei ein Ver­ständ­nis der boole­schen Ope­ra­to­ren in Python. Trifft keine der negativen Be­din­gun­gen zu, wird der ei­gent­lich in­ter­es­san­te Code aus­ge­führt:

def person_may_vote(person, voting_age = 18):
    if not person.has_id():
        return False
    if person.age < voting_age:
        return False
    # if we made it here, the person may vote
    return True

Mit logischen Ope­ra­to­ren if-An­wei­sun­gen in Python ver­ein­fa­chen und ersetzen

Wie wir bereits gesehen haben, ist es häufig notwendig, das Eintreten mehrerer Kon­di­tio­nen zu testen. Meist ist es sub­op­ti­mal, zum Testen mehrerer Be­din­gun­gen ver­schach­tel­te if-Anweisung zu nutzen. Be­trach­ten wir ex­em­pla­risch Code, der bestimmt, ob eine Person wählen darf:

if has_id(person):
    if is_adult(person):
        print("You may vote")

Schöner lässt sich die ver­ket­te­te Bedingung unter Nutzung logischer Ope­ra­to­ren dar­stel­len. Da wir testen wollen, ob beide Kon­di­tio­nen gleich­zei­tig zutreffen, nutzen wir den logischen UND-Operator. So benötigen wir nur eine einzige if-Anweisung:

if has_id(person) and is_adult(person):
    print("You may vote")

Hier ein Überblick der grund­le­gen­den logischen Ope­ra­to­ren in Python:

Logischer Operator Bedeutung Python-Syntax Andere Sprachen    
UND Ausdruck ist wahr, wenn alle Operanden wahr sind; gibt den zuletzt eva­lu­ier­ten Operanden zurück. and &&    
ODER Ausdruck ist wahr, wenn min­des­tens einer der Operanden wahr ist; gibt den zuletzt eva­lu­ier­ten Operanden zurück. or      
NICHT Dreht Wert des Ausdrucks um. not !    

Neben dem Ver­knüp­fen von Operanden in Kon­di­tio­nen werden die logischen Ope­ra­to­ren ein­ge­setzt, um bestimmte if-An­wei­sun­gen zu ersetzen. Es handelt sich dabei um das Setzen von Default-Werten.

Be­trach­ten wir ein Beispiel: Stellen wir uns vor, ein Nutzer könne für eine fi­nan­zi­el­le Be­rech­nung eine Währung festlegen. Aus Gründen der Be­nut­zer­freund­lich­keit soll die Wahl optional sein. Wählt der Benutzer keine Währung aus, soll EUR als Default-Wert verwendet werden. Der folgende Code bildet dieses Prinzip ab:

# user made no currency choice
currency = None
...
# further down in the program flow
if not currency:
    # set default if value missing
    currency = 'EUR'

Unter Einsatz des logischen ODER-Operators lässt sich die if-Anweisung auflösen. Wir schreiben den Code um; wird dieser aus­ge­führt, enthält die currency-Variable den Wert 'EUR':

# user made no currency choice
currency = None
...
# further down in the program flow
# set default if value missing
currency = currency or 'EUR'

Was genau geschieht hier? In der letzten Zeile wird der Variable 'cur­ren­cy' ein neuer Wert zu­ge­wie­sen. Dazu wird zunächst der Ausdruck 'currency or 'EUR'' auf der rechten Seite des Gleich­heits­zei­chens evaluiert. Der logische ODER-Operator evaluiert zunächst den linken Ausdruck, in diesem Falle 'cur­ren­cy'. Da dieser im Beispiel 'None' enthält und damit „falsy“ ist, wird der rechte Ausdruck 'EUR' evaluiert und als Rück­ga­be­wert für die Zuweisung verwendet.

Der kon­di­tio­na­le if-else-Operator in Python

Neben der kon­di­tio­nel­len Ver­zwei­gung gibt es einen weiteren Nutzen der if-else-Schlüs­sel­wor­te in Python. Es handelt sich um den kon­di­tio­na­len Operator, auch bekannt als „ternärer“ Operator. Der kon­di­tio­na­le Operator wird gerne ein­ge­setzt, um in Zu­wei­sun­gen zwischen zwei möglichen Werten zu un­ter­schei­den.

Be­trach­ten wir zunächst ein Beispiel unter Nutzung der if-else-Anweisung in Python. Der folgende Code legt Celsius oder Fah­ren­heit als Einheit für eine Tem­pe­ra­tur­mes­sung in Ab­hän­gig­keit vom gewählten Mess­sys­tem fest:

if system == 'metric':
    unit = 'C'
else:
    unit = 'F'

Unter Nutzung des kon­di­tio­na­len Operators lässt sich der Code zu einer einzelnen Zuweisung ver­ein­fa­chen:

unit = 'C' if system == 'metric' else 'F'

Wie der Name ausdrückt, nimmt der ternäre Operator drei Operanden entgegen: die beiden möglichen Werte und einen Ausdruck als Bedingung.

Operator-Arität Erklärung Beispiel
Unär Operator nimmt einen Operanden entgegen. not boolean_operand
Binär Operator nimmt zwei Operanden entgegen. left_operand + right_operand
Ternär Operator nimmt drei Operanden entgegen. some_value if condition else other_value

Mit der match-case-Anweisung if-else in Python ersetzen

Mit dem Er­schei­nen der Python-Version 3.10 wurde die match-case-Anweisung ein­ge­führt. Diese erinnert zunächst an die switch-case-Anweisung anderer Sprachen. Dort kommt switch-case zum Einsatz, um große if-elif-else-Kon­struk­te auf­zu­bre­chen.

Da als feh­ler­an­fäl­lig be­rüch­tigt, gab es switch-case in Python nie. Vielmehr handelt es sich bei der match-case-Anweisung in Python um eine an funk­tio­na­le Sprachen wie Haskell an­ge­lehn­te Funk­tio­na­li­tät für „Struc­tu­ral Pattern Matching“. Der Nutzen geht weit über den von switch-case hinaus.

Ver­an­schau­li­chen wir uns das Prinzip von match-case an einem Beispiel: Stellen wir uns vor, wir wollen Daten von Personen in ver­schie­de­nen Formaten ver­ar­bei­ten. Eine Person kann entweder als einzelner Name ab­ge­bil­det sein oder als Dic­tion­a­ry mit Name und ggf. Alter oder als Tupel von Vor- und Nachname. Ferner wollen wir den exakten Namen „Jack“ besonders behandeln:

# the name 'Jack'
person1 = 'Jack'
# just a name
person2 = 'John'
# name and age in a dict
person3 = {'name': 'Jim', 'age': 42}
# name in a dict, but no age
person4 = {'name': 'Walter', 'email': 'walter.white@example.com'}
# tuple of first and last name
person5 = ('Walther', 'White')

Schauen wir uns zunächst eine Funktion an, die eine Person in einem der Formate begrüßt. Wir nutzen eine if-elif-else-Kette und die is­in­s­tance-Funktion, um die ver­schie­de­nen Formate zu un­ter­schei­den. Ferner kommen mit dem UND-Operator ver­ket­te­te Kon­di­tio­nen und eine ver­schach­tel­te if-else-Anweisung zum Einsatz. Der finale Code wirkt nicht besonders über­sicht­lich:

def greet_person(person):
    if isinstance(person, str):
        if person == 'Jack':
            print('Jack himself has arrived')
        else:
            print(f"Hi there, {person}")
    elif isinstance(person, dict) and 'name' in person and 'age' in person:
        print(f"It's, {person['name']}. Born {person['age']} years ago")
    elif isinstance(person, dict) and 'name' in person:
        print(f"It's {person['name']}")
    elif isinstance(person, tuple) and len(person) == 2:
        first, last = person
        print(f"Hello, {first} {last}")
    else:
        print('Not sure what kind of person this is')

Schöner lässt sich der Code mit der match-case-Anweisung aufbauen. Wir be­schrei­ben die Struktur der einzelnen Formate direkt; einzelne Werte lassen sich als Variablen ex­tra­hie­ren. Der Code ist über­sicht­li­cher, weniger komplex und besser lesbar:

def match_person(person):
    match person:
        case 'Jack':
            print('Jack himself has arrived')
        case str() as name:
            print(f"Hi there, {name}")
        case {'name': name, 'age': age}:
            print(f"It's, {name}. Born {age} years ago")
        case {'name': name}:
            print(f"It's {name}")
        case (first, last):
            print(f"Hello, {first} {last}")
        case _:
            print('Not sure what kind of person this is')
Zum Hauptmenü