Python * args și ** kwargs (cu exemple)

În acest articol, vom afla despre Python * args și ** kwargs, utilizările și funcțiile acestora cu exemple.

În programare, definim o funcție pentru a crea un cod reutilizabil care efectuează o operație similară. Pentru a efectua acea operație, numim o funcție cu valoarea specifică, această valoare se numește argument de funcție în Python.

Vă recomandăm să citiți argumentele funcției Python și Python Function.

Să presupunem că definim o funcție pentru adunarea a 3 numere.

Exemplul 1: Funcția de a adăuga 3 numere

 def adder(x,y,z): print("sum:",x+y+z) adder(10,12,13)

Când rulăm programul de mai sus, ieșirea va fi

 suma: 35

În programul de mai sus avem adder()funcție cu trei argumente x, y și z. Când trecem trei valori în timp ce apelăm adder()funcția, obținem suma celor 3 numere ca ieșire.

Să vedem ce se întâmplă când trecem mai mult de 3 argumente în adder()funcție.

 def adder(x,y,z): print("sum:",x+y+z) adder(5,10,15,20,25)

Când rulăm programul de mai sus, ieșirea va fi

 TypeError: adder () ia 3 argumente poziționale, dar 5 au fost date

În programul de mai sus, am trecut 5 argumente adder()funcției în loc de 3 argumente din cauza cărora am primit TypeError.

Introducere în * args și ** kwargs în Python

În Python, putem transmite un număr variabil de argumente unei funcții folosind simboluri speciale. Există două simboluri speciale:

  1. * args (Argumente fără cuvinte cheie)
  2. ** kwargs (Argumente pentru cuvinte cheie)

Folosim * args și ** kwargs ca argument atunci când nu suntem siguri de numărul de argumente de transmis în funcții.

Python * arg

Ca și în exemplul de mai sus, nu suntem siguri cu privire la numărul de argumente care pot fi transmise unei funcții. Python are argumente * care ne permit să trecem numărul variabil al argumentelor care nu sunt cuvinte cheie pentru a funcționa.

În funcție, ar trebui să folosim un asterisc *înaintea numelui parametrului pentru a transmite argumente cu lungime variabilă. Argumentele sunt transmise ca un tuplu, iar aceste argumente trecute fac tuplu în interiorul funcției cu același nume ca și parametrul, cu excepția asteriscului *.

Exemplul 2: Folosirea * args pentru a transmite argumentele de lungime variabilă funcției

 def adder(*num): sum = 0 for n in num: sum = sum + n print("Sum:",sum) adder(3,5) adder(4,5,6,7) adder(1,2,3,5,6)

Când rulăm programul de mai sus, ieșirea va fi

 Suma: 8 Suma: 22 Suma: 17

În programul de mai sus, am folosit * num ca parametru care ne permite să transmitem adder()funcției lista argumentelor cu lungime variabilă . În interiorul funcției, avem o buclă care adaugă argumentul trecut și imprimă rezultatul. Am trecut 3 tupluri diferite cu lungime variabilă ca argument pentru funcție.

Python ** kwargs

Python transmite argumentul cu lungimea variabilă fără cuvinte cheie pentru a funcționa folosind * args, dar nu putem folosi acest lucru pentru a trece argumentul cuvântului cheie. Pentru această problemă Python a primit o soluție numită ** kwargs, ne permite să transmitem funcției lungimea variabilă a argumentelor cuvintelor cheie.

În funcție, folosim asteriscul dublu **înaintea numelui parametrului pentru a indica acest tip de argument. Argumentele sunt transmise ca un dicționar, iar aceste argumente fac ca un dicționar să funcționeze în interior cu același nume ca și parametrul care exclude asteriscul dublu **.

Exemplul 3: Utilizarea ** kwargs pentru a transmite argumentele variabile ale cuvântului cheie funcției

 def intro(**data): print("Data type of argument:",type(data)) for key, value in data.items(): print("() is ()".format(key,value)) intro(Firstname="Sita", Lastname="Sharma", Age=22, Phone=1234567890) intro(Firstname="John", Lastname="Wood", Email="[email protected]", Country="Wakanda", Age=25, Phone=9876543210)

Când rulăm programul de mai sus, ieșirea va fi

 Tipul de date al argumentului: Numele este Sita Numele de familie este Sharma Vârsta este 22 Telefonul este 1234567890 Tipul de date al argumentului: Prenumele este John Numele de familie este Lemn Adresa de e-mail este [email protected] Țara este Wakanda Vârsta este de 25 Telefonul este 9876543210

În programul de mai sus, avem o funcție intro()cu ** date ca parametru. Am trecut două dicționare cu lungime variabilă a argumentului către intro()funcție. Avem intro()funcția buclă internă care funcționează pe datele dicționarului trecut și imprimă valoarea dicționarului.

Lucruri de amintit:

  • * args și * kwargs sunt cuvinte cheie speciale care permit funcției să ia argumentul cu lungimea variabilă.
  • * args trece numărul variabil de liste de argumente fără cuvinte cheie și pe care operațiune a listei poate fi efectuată.
  • ** kwargs transmite numărul variabil de dicționar de argumente pentru cuvinte cheie pentru a funcționa operația unui dicționar.
  • * args și ** kwargs fac funcția flexibilă.

Articole interesante...