https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8
Wenn Sie sich den Python-Code genau ansehen
def f(*args, **kwargs):
pass
args with * mark
Und ich sehe kwargsmarkiert mit
**.
Was ist das? ??
Wofür stehen Args und Kwargs?
Im Englischen heißt das Argument "Argument", und wenn es mehrere Argumente gibt, handelt es sich natürlich um Argumente. Python ist eine Notation, die oft abgekürzt wird
--args = Abkürzung für Argumente Taple mit variabler Länge --kwargs = Abkürzung für Schlüsselwortargumente Schlüsselwortwörterbuch
Es bedeutet das.
*args
* args
ist eine Notation, mit der Sie das von der Funktion übergebene ** zusätzliche schlüsselwortlose Argument ** in einem einzigen Taple erhalten können.
Betrachten Sie beispielsweise die Funktion akkumulieren, die eine Reihe gegebener Ganzzahlen hinzufügt und zurückgibt:
def accumulate(*args):
print(args)
return sum(args)
'''
(10, 20, 30, 40)
100
'''
print(accumulate(10, 20, 30, 40))
Da es viele Argumente gibt, die akkumuliert werden sollen, werden sie als Taples in * args
gespeichert.
Wenn Sie auf diese Weise ein Argument mit einem "Sternchen" wie "* args" vorbereiten, können Sie das verbleibende Argument ohne Schlüsselwortspezifikation in einem erhalten.
Darüber hinaus können Tapple- und Listen-Iterables durch erneutes Anwenden von "Sternchen" ** entpackt ** werden.
def accumulate(*args):
print(*args)
return sum(args)
'''
10 20 30 40
100
'''
print(accumulate(10, 20, 30, 40))
Daher können Sie dieses Entpacken verwenden, um es beliebig oft an andere Funktionen zu übergeben.
def accumulate(*args):
return sum(args)
def some_calc(*args):
#Auspacken und weitergeben, um sich anzusammeln
return accumulate(*args)
print(some_calc(10, 20, 30, 40))
**args
** args
ist ein Schlüsselwortspezifikationsargument, das ** Wörterbücher zusammen mit anderen Argumenten empfängt, die nicht zutreffen **.
def f(x, y, **kwargs):
print(x)
print(y)
print(kwargs)
'''
10
20
{'a': 20, 'b': 'hello'}
'''
f(x=10, y=20, a=20, b="hello")
Oben fließen x und y dorthin, weil sie bereits im Argument der Funktion f vorhanden sind, aber leider werden kwargs a und b ohne Empfänger durcheinander bringen.
Das Wörterbuch kann auch entpackt werden.
Wenn Sie nur ein "Sternchen" verwenden, können Sie nur den Schlüssel abrufen. Und wenn Sie zwei verwenden, sieht es aus wie a = 20, b = "Hallo".
def f(x, y, **kwargs):
print(x)
print(y)
print(*kwargs)
#print(**kwargs)
'''
10
20
a b
'''
f(x=10, y=20, a=20, b="hello")
Leider funktioniert print (** kwargs)
nicht. Ich bekomme eine Fehlermeldung.
In Python drucken
Dies liegt daran, dass die Notation "print (a = 20, b =" hallo ")" nicht angegeben ist.
* args
, ** kwargs
ist eine Notation, die nur in einer dynamischen Sprache ausgeführt werden kann.
Dies wird häufig in Python-Paketen wie def init verwendet.
Auf diese Weise können Sie benutzerdefinierte Parameter in einem Wörterbuch oder Taple empfangen, wodurch viele Verhaltensweisen möglich sind.
In Verbindung mit Vars kann es sehr nützliche Verhaltensweisen ausführen. Ich werde mich in einem anderen Artikel damit befassen.
Recommended Posts