In deze tutorial zal ik me richten op argumenten (* args
) en zoekwoordargumenten (* kwargs
) in Python.
Ik zal je leren wat args en kwargs zijn en, nog belangrijker, hoe je ze moet gebruiken - dat is hoe je een onbeperkt aantal argumenten en zoekwoordargumenten moet opnemen in functies.
* args
worden gebruikt om te passeren non-zoekwoord argumenten. Voorbeelden van niet-trefwoordargumenten zijn fun (3,4), fun ("foo", "bar")
.
* args
worden meestal gebruikt als een maatregel om te voorkomen dat het programma crasht als we niet weten hoeveel argumenten worden doorgegeven aan de functie. Dit wordt zowel in C ++ als in andere programmeertalen gebruikt.
** kwargs
is een woordenboek met trefwoordargumenten. De **
stelt ons in staat om een willekeurig aantal trefwoordargumenten door te geven. Een trefwoordargument is in feite een woordenboek.
Een voorbeeld van een sleutelwoordargument is fun (foo = 2 bar = 7)
.
** kwargs
zijn net zoals * args
behalve dat u de variabelen en de hoeveelheid binnen de functie declareert argumenten.
Args en kwargs zijn handig wanneer u:
Laten we eens kijken naar hoe kwargs en args worden gebruikt in functies.
De onderstaande functie bevat drie argumenten. De drie argumenten zijn expliciet gedefinieerd, dus meer of minder zal een fout in het programma veroorzaken.
def add (a, b, c): print (a + b + c) print add (2,3,4)
Laten we de functie uitvoeren. De functie voegt de drie nummers toe en geeft de volgende uitvoer:
Uitgang 9
Wat als we vier argumenten in de functie zouden doorgeven in plaats van de vereiste drie? We ontvangen een foutmelding zoals hieronder getoond.
Dit komt doordat slechts drie parameters in de functie zijn gedefinieerd, maar we hebben vier positionele argumenten doorgegeven toen de functie werd aangeroepen.
def add (a, b, c): print (a + b + c) print add (2,3,4,5)
Output TypeError: add () neemt 3 positionele argumenten maar er zijn er 4 gegeven
In het tweede voorbeeld hieronder, de *
is voor non-zoekwoord argumenten en wordt doorgegeven aan de functie. In plaats van gedefinieerde argumenten te gebruiken, vervangen we een
, b
en c
met een enkele parameter (* args
).
Merk op hoe het gebruik van * args
maakt het gemakkelijk om een willekeurig aantal argumenten te gebruiken zonder uw code te hoeven wijzigen. * args
bied meer flexibiliteit aan uw code omdat u in de toekomst zoveel argumenten kunt hebben als u wilt.
def add (* args): total = 0 voor arg in args: total + = arg print total
Scenario 1 print add (1,2,5) Uitgang 8
Scenario 2 print add (1,2,5,6) output 14
Scenario 3 print add (1,2,5,8) Output 16
Maak een eenvoudige functie zoals getoond:
def func (* args): # * args betekent voor hoe veel argumenten je ook inneemt, het zal ze allemaal vangen voor arg in args: print arg
Test de functie met een combinatie van gehele getallen en strings:
def func (* args): # * args betekent voor hoe veel argumenten je ook meeneemt, het zal ze allemaal vangen voor arg in args: print arg print func (11,3,4,5, "tuts")
Uitgang 11 3 4 5 tuts
Wat als we een lijst zouden doorgeven als argument? Test de functie met een lijst door de vorige argumenten te vervangen door een lijst, l = [11,3,4,5, "tuts]
.
def func (* args): # * args betekent voor hoeveel argumenten je ook inneemt, het zal ze allemaal vangen voor arg in args: print arg l = [11,3,4,5, "tuts"] print func (l )
Hiermee wordt de lijst als geheel afgedrukt. Dit komt omdat de lijst als één item wordt geïnterpreteerd. Uitgang [11,3,4,5, "tuts]
Uit het bovenstaande voorbeeld kunt u ook gebruiken * args
om argumenten uit te pakken die zich al in een lijst of een tuple bevinden, zodat alle elementen in de lijst als verschillende parameters worden doorgegeven.
Met dezelfde functie:
def func (* args): # * args betekent voor hoe veel argumenten je ook meeneemt, het zal ze allemaal vangen voor arg in args: print (arg) l = [11,3,4,5, "tuts"] print ( func (* l))
Met * wordt de lijst uitgepakt en wordt elk individueel lijstitem uitgevoerd. Uitgang 11 3 4 5 tuts
Met Kwargs kunt u zoekwoordargumenten doorgeven aan een functie. Ze worden gebruikt als u niet zeker bent van het aantal zoekwoordargumenten dat in de functie wordt doorgegeven.
Schrijf een functie mijn_func
en pas erin (x = 10, y = 20)
als sleutelwoord argumenten zoals hieronder getoond:
def my_func (x = 10, y = 20): print x, y
Hiermee worden de waarden van x en y Output 10,20 afgedrukt
Kwargs kan worden gebruikt voor het uitpakken van woordenboeksleutel, waardeparen. Dit gebeurt met behulp van de dubbele asterisk-notatie (**
). Het is belangrijk om te weten dat elke sleutel moet overeenkomen met een waarde.
Hier is een typisch voorbeeld van hoe het is gedaan. De onderstaande functie neemt landen als sleutels en hun hoofdsteden als de waarden. Vervolgens wordt een instructie afgedrukt die itereert over de kwargs en wordt elk zoekwoord toegewezen aan de waarde die eraan is toegewezen.
def capital_cities (** kwargs): # initialiseer een lege lijst om het resultaat te bewaren = [] voor sleutel, waarde in kwargs.items (): result.append ("De hoofdstad van is .format (key , waarde) retourresultaat
Je kunt de functie oproepen met elke gewenste argumenten.
def capital_cities (** kwargs): # initialiseer een lege lijst om het resultaat te bewaren = [] voor sleutel, waarde in kwargs.items (): result.append ("De hoofdstad van is .format (key , waarde) retourresultaat print capital_city (China = "Beijing", Cairo = "Egypte", Rome = "Italië"))
output ['De hoofdstad van China is Beijing', 'De hoofdstad van Cairo is Egypte', 'De hoofdstad van Rome is Italië']
Voor een meer complex voorbeeld, stel dat we een model voor een klant hebben dat er ongeveer zo uitziet:
class Klant (models.Model): first_name = models.CharField (max_length = 100, null = True) last_name = models.CharField (max_length = 100) gebruikersnaam = models.Charfield (max_length = 100) email = models.EmailField (max_length = 100) wachtwoord = modellen.CharField (max_length = 100)
U kunt kwargs gebruiken voor zowel gegevensinvoer als gegevensquery's van modelobjecten. Laten we een functieoverzicht schrijven om een nieuwe klant te maken.
kwargs = "first_name": "John", "last_name": "Doe", "gebruikersnaam": "johndoe", "email" [email protected] "," password ":" 1234 " new_user = Gebruiker (* * kwargs) new_user.save ()
Hier leest u hoe u een query kunt uitvoeren van de klant die we net met kwargs hebben gemaakt.
filter_customer = 'email': [email protected], 'gebruikersnaam': johndoe, Customer.objects.filter (** filter_customer)
Bij gebruik van zowel args als kwargs in dezelfde functiedefinitie, * args
moet eerder voorkomen ** kwargs
.
class MyFunction (Foo): def __init __ (self, * args, ** kwargs): print 'my function' super (MyFunction, self) .__ init __ (* args, ** kwargs)
Voorbeeld:
def Func (* args, ** kwargs): voor arg in args: print arg voor item in kwargs.items (): print item
Onthouden args
zou eerder moeten komen kwargs
.
def Func (* args, ** kwargs): voor arg in args: print arg voor item in kwargs.items (): print item print Func (1, x = 7, u = 8)
Uitgang 1 ('x', 7) ('u', 8)
Ik hoop dat deze tutorial je heeft geholpen args en kwargs te begrijpen.
Hieronder staan enkele tips om te onthouden bij het gebruik van args en kwargs:
* args
en ** kwargs
zijn speciale syntaxis die in functies worden gebruikt om een variabel aantal argumenten aan een functie door te geven.* args
eerder voorkomen ** kwargs
in een functiedefinitie.* args
en ** kwargs
worden het best gebruikt in situaties waarin het aantal ingangen relatief klein zal blijven.args
en kwargs
zijn alleen volgens afspraak en geen vereiste. U kunt bijvoorbeeld gebruiken * foo
in plaats van * args
of ** foo
in plaats van ** kwargs
.De officiële Python-documentatie biedt veel informatie voor verder onderzoek. Aarzel niet om te zien wat we te koop aanbieden en om te studeren op de markt, en aarzel niet om vragen te stellen en uw waardevolle feedback te geven met behulp van de onderstaande feed.