[Road to Intermediate] Was sind Pythons * Argumente, ** Kwargs?

Link zur Zusammenfassung

https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8

Einführung

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 steht es überhaupt?

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.

Schließlich

* 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

[Road to Intermediate] Was sind Pythons * Argumente, ** Kwargs?
[Road to Intermediate] Verwenden Sie die in Python integrierten Funktionsvariablen
Weg zu Intermediate Linux: Network Edition
[Road to Intermediate] Grundlegendes zu Python-Eigenschaften
[Road to Intermediate Python] Verwenden Sie ternäre Operatoren
[Road to Intermediate Python] Verwenden Sie Lambda-Ausdrücke
[Road to Intermediate Python] Zusammenfassung der Artikelverknüpfungen
[Road to Intermediate] Python scheint alles Objekte zu sein
Was sind Python Taples und * Args?
[Road to Intermediate Python] Definieren Sie die Funktion __getattr__ in der Klasse
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse