Funktionen als Werte in einem dict

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Natrix natrix
User
Beiträge: 16
Registriert: Mittwoch 29. März 2017, 09:16

Hallo,

als Ersatz für den Switch-Case Befehl möchte ich ein dict nutzen, um verschiedene Codeblöcke aufzurufen (ich nenne das Konstrukt dispatcher).
Leider verhält sich der dispatcher nicht wie gewünscht. Er übergibt zwar artig strings wenn er soll, ruft aber keine Funktionen auf.

Was muss ich machen, damit die Funktionen aufgrufen werden.

Danke für Eure Hife.
VG
NN

Code: Alles auswählen

def eins():
    print("eins")
    
def zwei():
    print("zwei")

dispatcher = {1 : eins, 
              2 : zwei,
              3 : "drei",
              4 : "vier" }

eingabe = int(input("Bitte geben Sie einen Wert ein: "))
dispatcher.get(eingabe, 'default')
BlackJack

@Natrix natrix: Nun dazu musst Du die Funktionen *aufrufen*:

Code: Alles auswählen

dispatcher.get(eingabe, 'default')()
Wobei das dann natürlich bei den Werten für 3 und 4, sowie bei 'default' ein Problem ist, denn Zeichenketten kann man nicht aufrufen:

Code: Alles auswählen

In [7]: 'default'()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-2bbe1ad68b62> in <module>()
----> 1 'default'()

TypeError: 'str' object is not callable
Benutzeravatar
Natrix natrix
User
Beiträge: 16
Registriert: Mittwoch 29. März 2017, 09:16

Hallo Blackjack,

danke. Kleine Klammer, große Wirkung. Der Aufruf... natürlich. :oops:
Die Strings kommen ohnehin weg, waren nur Platzhalter.

VG
NN
Antworten