Ich habe eine Python-Funktion, die mehrere Argumente akzeptiert. Einige dieser Argumente könnten in einigen Szenarien weggelassen werden.
def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):
#code
Die Argumente d
durch h
sind Strings , die jeweils unterschiedliche Bedeutungen haben. Es ist wichtig, dass ich auswählen kann, welche optionalen Parameter in einer beliebigen Kombination übergeben werden sollen. Zum Beispiel, (a, b, C, d, e)
oder (a, b, C, g, h)
, oder (a, b, C, d, e, f
oder alle (dies sind meine Entscheidungen).
Es wäre großartig, wenn ich die Funktion überladen könnte - aber ich habe gelesen, dass Python das Überladen nicht unterstützt. Ich habe versucht, einige der erforderlichen int-Argumente in die Liste einzufügen - und habe einen Fehler bei der Nichtübereinstimmung der Argumente erhalten.
Im Moment sende ich leere Zeichenfolgen anstelle der ersten fehlenden Argumente als Platzhalter. Ich möchte eine Funktion nur mit tatsächlichen Werten aufrufen können.
Gibt es eine Möglichkeit, dies zu tun? Könnte ich eine Liste anstelle der Argumentliste übergeben?
Im Moment sieht der Prototyp mit ctypes ungefähr so aus:
_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]
Antworten:
Versuchen Sie es so zu nennen :
obj.some_function( '1', 2, '3', g="foo", h="bar" )
. Nach den erforderlichen Positionsargumenten können Sie bestimmte optionale Argumente nach Namen angeben.quelle
Verwenden
*args
Sie einfach den Parameter, mit dem Sie so viele Argumente übergeben können, wie Sie möchtena,b,c
. Sie müssten der Zuordnung eine Logik hinzufügenargs
->c,d,e,f
aber es ist eine "Art" der Überladung.Und es werden Werte von gedruckt
c,d,e,f
Ebenso könnten Sie das
kwargs
Argument verwenden und dann Ihre Parameter benennen.Und dann
kwargs
hätte ein Wörterbuch aller Parameter, nach denen der Schlüssel bewertet wirda,b
quelle
c = kwargs.get('c', None)
verwendet wird? Wird es in allen Funktionen benötigt, die optionale Argumente haben? In Ihrem Code hatten Sie nur 2 optionale Argumente. Was ist, wenn der Benutzer ein anderes Argument sagen möchtee
? Wie kann ich Ihren Beispielcode für eine unbekannte Anzahl optionaler Argumente ändern, zum Beispiel :def my_func(a, b, *args, **kwagars): obj = <do something with a & b> obj.add(c) obj.add(d) continue obj.add(for e, f, g...)
? Muss ich einschließen,c = kwargs.get('c', None) etc
bevor ich das macheobj.add(c, d, ...)
?