2017-11-13 5 views
-1

Bitte lassen Sie mich wissen, wenn es dupliziert (ich glaube, es gibt) und ich werde den Beitrag entfernen. Ich bin mir nicht sicher über den Jargon für diese Frage.Python: Definieren Sie Argumente einer Funktion, die die Argumente der anderen Funktion enthalten

Wenn eine neue Funktion augmented_func Schreiben, die bereits die andere Funktion enthält definiert original_func, ich versuche zu definieren Argumente zu vermeiden, die bereits in original_func:

def original_func(a1, a2 ,a3): 
    print(a1, a2, a3) 

def augmented_func(b, a1, a2, a3): 
    print(original_func(a1, a2, a3), b) 

Wie vermeide ich a ‚s zu schreiben, als augmented_func definieren , und es einfacher machen, besonders wenn die Anzahl der Argumente für original_func mehr als, sagen wir, drei im Beispiel ist?

Antwort

2

Verwenden * Notation für eine beliebige Anzahl von Positionsargumente:

def augmented_func(b, *args): 
    print(original_func(*args), b) 

augmented_func('b', 1, 2, 3) 

Oder verwenden Sie Schlüsselwort-Argumente mit **:

def augmented_func(b, **kwargs): 
    print(original_func(**kwargs), b) 

augmented_func('b', a1=1, a2=2, a3=3) 
+0

oh, also kann ich 'augmented_func' einfach wie folgt aufrufen:' augmented_func (b, a1 = 3, a2 = 2, a3 = 4) ', stimmt das? – Francis

+0

Nein, aber 'augmented_func (b, 3, 2, 4)' funktioniert: – schwobaseggl

+0

zu tun, dass Sie 'kwargs' verwenden möchten. Bei 'args' müssen Sie auf die Reihenfolge achten, in der Sie Argumente senden. – ljetibo

1

Ich denke, was Sie suchen ist so etwas wie

def original_func(a1, a2 ,a3): 
    print(a1, a2, a3) 

def augmented_func(b, *args): 
    print(original_func(*args), b) 

können Sie es dann alsnennen

*args und **kwargs ist eine gute Möglichkeit, die variable Anzahl von Argumenten zu übergeben und sie an andere interne Funktionsaufrufe zu übergeben.

Python docs für weitere Informationen.

+0

Kannst du auch hier erwähnen, wie man Kwargs benutzt? –

Verwandte Themen