Also, die Hauptsache, die Sie vermissen, ist die Ausführung des Funktionsaufrufs. Der bereitgestellte Code packt die Funktionsreferenz richtig, aber Sie benötigen Parens, um sie auszuführen.
Sobald Sie es ausführen, benötigen Sie eine Möglichkeit, Argumente zu übergeben. Da die Anzahl der Argumente je nach Funktion variiert, besteht der beste Weg darin, sowohl eine variable Anzahl von Argumentenlisten (*args
) als auch ein Wörterbuch mit Schlüsselwortargumenten (**kwargs
) zu übergeben.
ich in Ihrem Pseudo-Code gefüllt haben etwas so diesen Lauf:
def add(first, second):
return first + second
def sub(first, second):
return first - second
operations = {
"Add": add,
"Sub": sub,
}
Anruf mit args hinzufügen:
op = 'Add'
op_args = [1, 2]
op_kwargs = {}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
3
Anruf mit kwargs hinzufügen:
op = 'Add'
op_args = []
op_kwargs = {'first': 3, 'second': 4}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
7
Wenn Sie versuchen, beide args und kwargs in einem widersprüchlichen Weg zu passieren, wird es scheitern:
# WON'T WORK
op = 'Add'
op_args = [1, 2]
op_kwargs = {'first': 3, 'second': 4}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
TypeError: add() got multiple values for argument 'first'
Aber Sie können sowohl in komplementärer Weise verwenden:
op = 'Add'
op_args = [1]
op_kwargs = {'second': 4}
ret_val = operations[operation](*op_args, **op_kwargs)
print(ret_val)
5
Eine technische Anmerkung ist, dass die Benennung args
und kwargs
in Python rein konventionell ist. Du könntest sie nennen, was immer du willst. Eine Antwort, die die beiden mehr diskutiert, ist hier verfügbar: https://stackoverflow.com/a/36908/149428.
Beachten Sie, dass ich keine Eingabeüberprüfung usw. für den Zweck einer einfachen, fokussierten Antwort durchgeführt habe. Wenn Sie Eingaben von einem Benutzer erhalten, ist dies ein wichtiger Schritt, an den Sie sich erinnern sollten.
'Operationen [Operation]' ist die Funktion. Sie müssen die Funktion mit den entsprechenden Argumenten aufrufen, zB: 'operations ['Add'] (1,2)' –