Was tun *args
y **kwargs
bedeuten?
def foo(x, y, *args):
def bar(x, y, **kwargs):
Was tun *args
y **kwargs
bedeuten?
def foo(x, y, *args):
def bar(x, y, **kwargs):
**
Zusätzlich zu den Antworten in diesem Thread gibt es ein weiteres Detail, das nirgendwo erwähnt wurde. Dies erweitert die Antwort von Brad Solomon
Auspacken mit **
ist auch bei der Verwendung von Python nützlich str.format
.
Dies ähnelt in etwa dem, was man mit Python machen kann f-strings
f-Zeichenkette aber mit dem zusätzlichen Aufwand, ein dict zu deklarieren, um die Variablen zu halten (f-string benötigt kein dict).
## init vars
ddvars = dict()
ddcalc = dict()
pass
ddvars['fname'] = 'Huomer'
ddvars['lname'] = 'Huimpson'
ddvars['motto'] = 'I love donuts!'
ddvars['age'] = 33
pass
ddcalc['ydiff'] = 5
ddcalc['ycalc'] = ddvars['age'] + ddcalc['ydiff']
pass
vdemo = []
## ********************
## single unpack supported in py 2.7
vdemo.append('''
Hello {fname} {lname}!
Today you are {age} years old!
We love your motto "{motto}" and we agree with you!
'''.format(**ddvars))
pass
## ********************
## multiple unpack supported in py 3.x
vdemo.append('''
Hello {fname} {lname}!
In {ydiff} years you will be {ycalc} years old!
'''.format(**ddvars,**ddcalc))
pass
## ********************
print(vdemo[-1])
*args ( oder *any ) bedeutet alle Parameter
def any_param(*param):
pass
any_param(1)
any_param(1,1)
any_param(1,1,1)
any_param(1,...)
HINWEIS : Sie können keine Parameter an *args übergeben.
def any_param(*param):
pass
any_param() # will work correct
Die *args sind vom Typ Tupel
def any_param(*param):
return type(param)
any_param(1) #tuple
any_param() # tuple
für den Zugriff auf Elemente nicht von * verwenden
def any(*param):
param[0] # correct
def any(*param):
*param[0] # incorrect
Die **kwd
**kwd oder **beliebig Dies ist ein Diktat-Typ
def func(**any):
return type(any) # dict
def func(**any):
return any
func(width="10",height="20") # {width="10",height="20")
def foo(param1, *param2):
ist eine Methode, die eine beliebige Anzahl von Werten für *param2
,def bar(param1, **param2):
ist eine Methode, die eine beliebige Anzahl von Werten mit Schlüsseln für *param2
param1
ist ein einfacher Parameter.Zum Beispiel ist die Syntax für die Implementierung von varargs in Java wie folgt:
accessModifier methodName(datatype… arg) {
// method body
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
14 Stimmen
Siehe auch stackoverflow.com/questions/6967632/
161 Stimmen
Diese Frage ist ein sehr beliebtes Ziel für Duplikate, aber leider wird sie oft falsch verwendet. Denken Sie daran, dass diese Frage nach folgenden Punkten fragt Funktionen mit Varargs definieren (
def func(*args)
). Für die Frage, was es in der Funktion bedeutet ruft auf. (func(*[1,2])
) siehe aquí . Bei einer Frage, die comment zum Entpacken von Argumentlisten siehe aquí . Für eine Frage, die fragt, was die*
bedeutet in Literale ([*[1, 2]]
) siehe aquí .4 Stimmen
@Aran-Fey: Ich denke, ein besseres Ziel für "was bedeutet es in Funktionsaufrufen" ist Was bedeutet der Sternoperator in einem Funktionsaufruf? . Ihr Link geht nicht wirklich auf die Verwendung von
**
und es ist eine viel engere Frage.1 Stimmen
Diese Frage ist - wie viele sehr alte Fragen - irgendwie verkehrt. Normalerweise sollte sich eine Frage darauf beziehen, wie man ein Problem in neuem Code löst, und nicht darauf, wie man bestehenden Code versteht. Für letzteres gilt: Wenn Sie etwas anderes als Duplikat schließen, sollten Sie stackoverflow.com/questions/1993727/ (dies gilt allerdings nur für
*
und nicht**
).