[Python] * args ** Was ist kwrgs?

01. Was in diesem Artikel zu schreiben

Ich möchte es hier organisieren, damit ich mich auch im Laufe der Zeit schnell daran erinnern kann.

02. * und ** werden an Parameter angehängt, die Argumente variabler Länge empfangen.

Ich habe den Code gesehen, der in den Funktionsparametern "* args" und "** kwargs" sagt. Dies wird in einem Parameter beschrieben, der Argumente variabler Länge empfängt, und die Anzahl der Argumente, die beim Aufrufen einer Funktion an den Parameter übergeben werden, kann eine beliebige Zahl anstelle einer festen sein.

Ein Argument mit variabler Länge ermöglicht es Ihnen, eine beliebige Anzahl von Argumenten anzugeben, wobei Sie normalerweise nur eines angeben können.

Beispiel


def kansu(*args):
    print(f'{args}Empfangen!')

kansu('Apple', 'Banana', 100) 
# ('Apple', 'Banana', 100)Empfangen!

Für nur einen Parameter, args, habe ich drei Argumente übergeben, aber es funktioniert ohne Fehler.

In einem bekannten Beispiel verwenden die Funktion "print ()" und die Methode ".format ()" auch Argumente variabler Länge.

Sie können so viele Argumente übergeben, wie Sie möchten


print('a','b','c') # a b c

Außerdem werden üblicherweise die Namen "args" und "kwargs" verwendet, sodass Sie einen beliebigen Namen verwenden können.

def x(*z):
    y = []
    for i in z:
        y.append(i*10)
    print(y)
    
x(1,2,3,4,5,6,7,8)
# [10, 20, 30, 40, 50, 60, 70, 80]

03. Unterschied zwischen "*" eins und zwei

Es gibt zwei Arten von Argumenten variabler Länge mit jeweils unterschiedlichen Möglichkeiten zum Übergeben und Empfangen von Argumenten.

    1. Parameter, die Positionsargumente variabler Länge <- * args empfangen Erhalten Sie eine beliebige Anzahl von Argumenten in einem Taple (wenn Sie kein Argument übergeben, handelt es sich um ein leeres Tapple). Positionsargument übergeben
  1. Parameter, die Schlüsselwortargumente variabler Länge <- * kwargs erhalten Erhalten Sie eine beliebige Anzahl von Argumenten der Form "Schlüsselwort = Wert" im Wörterbuchtyp ("Schlüsselwert"). (Wenn Sie kein Argument übergeben, ist es ein leeres Wörterbuch.) Als Schlüsselwortargument übergeben

04. Verwendung von Parametern, die Positionsargumente variabler Länge erhalten

Durch Hinzufügen von * zum Argument erhält der Parameter ein Positionsargument variabler Länge. Das heißt, es erhält eine beliebige Anzahl von Argumenten. Die Verwendung der Funktion hängt davon ab, wo das Positionsargument variabler Länge im Parameter der Funktion definiert ist.

1.Der letzte Parameter ist die variable Länge


def myfunction(x, y, *z):
    print(f'{x} - {y} - {z}')

myfunction(2, 3, 5, 6, 7)  #  2 - 3 - (5, 6, 7)

Das erste und das zweite Argument entsprechen "x" bzw. "y". Nachfolgende Argumente entsprechen "z" und werden in Tapples gespeichert.

2.Parameter mit variabler Länge unterwegs


def myfunction(x, *y, z):
    print(f'{x} - {y} - {z}')

myfunction(2, 3, 5, 6, 7) # TypeError: myfunction() missing 1 required keyword-only argument: 'z'

Es wird ein Fehler ausgegeben, da keine Argumente an den Parameter z übergeben wurden. In diesem Fall ist z ein reines Schlüsselwortargument. Sie müssen also einen Standardwert festlegen oder ihn beim Aufruf als Schlüsselwortargument verwenden.

2-1.Standardwert festlegen


def myfunction(x, *y, z=0):
    print(f'{x} - {y} - {z}')

myfunction(2, 3, 5, 6, 7) # 2 - (3, 5, 6, 7) - 0

2-2.Als Schlüsselwortargument verwenden


def myfunction(x, *y, z):
    print(f'{x} - {y} - {z}')

myfunction(2, 3, 5, 6, 7, z=0) # 2 - (3, 5, 6, 7) - 0

05. Verwendung von Schlüsselwortargumenten variabler Länge

Durch Hinzufügen von "" zum Argument erhält der Parameter ein Schlüsselwortargument mit variabler Länge. Das heißt, es empfängt eine beliebige Anzahl von "Schlüsselwörtern = Werten", und die Schlüsselwörter und Argumente entsprechen dem Wörterbuchtyp "Schlüssel" bzw. "Wert". Wie Sie die Funktion verwenden, hängt davon ab, wo Sie in den Parametern der Funktion "" definieren.

1.Machen Sie den letzten Parameter zu einem Schlüsselwortargument mit variabler Länge


def myfunction(param1, param2, **param):
    print(f'{param1} | {param2} | {param}')

myfunction(2, 3, param3=4, param4=5, param5=6)  # 2 | 3 | {'param3': 4, 'param4': 5, 'param5': 6}

Der durch das Schlüsselwortargument mit variabler Länge erhaltene Wert wird zu einem Wörterbuchtyp.

2.Machen Sie den Parameter in der Mitte zu einem Schlüsselwortargument mit variabler Länge


def myfunction(param1, **param, param2):
    print(f'{param1} | {param2} | {param}')

Das Ergebnis ist ein Syntaxfehler Es ist nicht zulässig, Schlüsselwortargumente variabler Länge in der Mitte zu definieren.

06. Wenn zwei Argumente variabler Länge zusammen verwendet werden

Normale Parameter nach Parametern, die Positionsargumente variabler Länge erhalten, sind reine Schlüsselwortargumente.

def Test(a, *b, c): #c ist nur für Schlüsselwörter
  pass

Nach den Parametern, die Schlüsselwortargumente mit variabler Länge erhalten, dürfen keine regulären Parameter angegeben werden.

05-2.Erneut veröffentlichen


def myfunction(param1, **param, param2):
    print(f'{param1} | {param2} | {param}')

Daher muss die Reihenfolge bei gemeinsamer Verwendung wie folgt sein.

1.Parameter, die sowohl Positions- als auch Schlüsselwortargumente erhalten
2.Parameter, die Positionsargumente variabler Länge empfangen
3.Parameter, die nur Schlüsselwortargumente erhalten
4.Parameter, die Schlüsselwortargumente variabler Länge erhalten

Recommended Posts

[Python] * args ** Was ist kwrgs?
Was ist Python?
Was ist Python?
[Python] Was ist Pipeline ...
[Python] Was ist virtualenv?
[Python] Python und Sicherheit - is Was ist Python?
Python-Grundkurs (1 Was ist Python?)
[Python] Was ist eine Zip-Funktion?
[Python] Was ist eine with-Anweisung?
[Python] Was ist @? (Über Dekorateure)
[Python] Was ist der sortierte Schlüssel?
Python für Anweisung ~ Was ist iterierbar ~
Wofür ist der Python-Unterstrich (_)?
Python> Was ist ein erweitertes Slice?
Was ist ein Namespace?
Was ist copy.copy ()
[Python] Was ist Pandas Series und DataFrame?
[Python] Was wird durch Mehrfachvererbung geerbt?
Was ist NaN? NaN Zoya (Python) (394 Tage zu spät)
Python ist einfach
Was ist Django? .. ..
Was ist dotenv?
Was ist POSIX?
Was für eine Programmiersprache ist Python?
Was ist klass?
Was ist SALOME?
Was ist "Mahjong" in der Python-Bibliothek? ??
Was ist ein Hund? Python-Installationsvolumen
Was ist Linux?
Was ist Hyperopt?
Python ist eine Instanz
Was ist Linux?
Was ist Pyvenv?
Was ist __call__?
Was ist Linux?
Was ist ein Algorithmus? Einführung in den Suchalgorithmus] ~ Python ~
Was ist "funktionale Programmierung" und "objektorientiert"? Python Edition
Was ist im Docker Python-Image pfeifend?
Ich habe Python ausprobiert! ] Heute Abschluss von "Jeder Python! Was ist Python!"!
Was vergleichst du mit Python und ==?
[Einführung in die Udemy Python3 + -Anwendung] 54. Was ist Docstrings?
Was sind Python Taples und * Args?
Sag mir, was eine gleichwinklige Abbildung ist, Python!
Was ist eine Distribution?
Was ist Piotroskis F-Score?
Was ist Raspberry Pi?
Was ist das Calmar-Verhältnis?
Was ist ein Terminal?
[PyTorch Tutorial ①] Was ist PyTorch?
Was ist Hyperparameter-Tuning?
Was ist ein Hacker?
Was ist JSON? .. [Hinweis]
Wofür ist Linux?
Was ist ein Zeiger?
Was ist Ensemble-Lernen?
Was ist TCP / IP?
Was ist Pythons __init__.py?
Was ist ein Iterator?
Was ist UNIT-V Linux?