V tomto článku sa budeme zaoberať tým, čo ** (dvojitá hviezdička/hviezdička) a * (hviezda/hviezdička) robia pre parametre v Python , Tu budeme tiež pokrývať príklady args a kwargs v Pythone. Pomocou špeciálnych symbolov môžeme funkcii odovzdať premenlivý počet argumentov.
Existujú dva špeciálne symboly:
*args a **kwargs v Pythone
Špeciálne symboly používané na odovzdávanie argumentov v Pythone:
- *argumenty (argumenty iné ako kľúčové slová)
- **kwargs (argumenty kľúčových slov)
Poznámka: Zástupný znak alebo * zápis ako tento – *args OR **kwargs – používame ako argument našej funkcie, keď máme pochybnosti o počte argumentov, ktoré by sme mali do funkcie odovzdať.
Čo je to Python *args?
Špeciálna syntax *argumenty v definíciách funkcií v Pythone sa používa na odovzdanie premenného počtu argumentov do funkcie. Používa sa na odovzdanie zoznamu argumentov s premenlivou dĺžkou bez kľúčových slov.
- Syntaxou je použitie symbolu * na prijatie premenlivého počtu argumentov; podľa konvencie sa často používa so slovom args.
- Čo *argumenty vám umožňuje prijať viac argumentov, ako je počet formálnych argumentov, ktoré ste predtým definovali. S *argumenty , k vašim aktuálnym formálnym parametrom možno pripojiť ľubovoľný počet ďalších argumentov (vrátane nulových argumentov navyše).
- Napríklad chceme vytvoriť funkciu násobenia, ktorá má ľubovoľný počet argumentov a dokáže ich všetky znásobiť. Dá sa to urobiť pomocou *args.
- Pomocou * sa premenná, ktorú spájame s *, stáva iterovateľnou, čo znamená, že môžete robiť veci, ako je iterácia, spúšťanie niektorých funkcií vyššieho rádu, ako je mapa a filter atď.
Príklad 1:
Program Python na ilustráciu *args pre premenlivý počet argumentov
pytón
def myFun(*argv): for arg in argv: print(arg) myFun('Hello', 'Welcome', 'to', 'techcodeview.com')>
Výkon:
Hello Welcome to techcodeview.com>
Príklad 2:
Program Python na ilustráciu *args s prvým argumentom navyše
Python3 def myFun(arg1, *argv): print('First argument :', arg1) for arg in argv: print('Next argument through *argv :', arg) myFun('Hello', 'Welcome', 'to', 'techcodeview.com')>
Výkon:
First argument : Hello Next argument through *argv : Welcome Next argument through *argv : to Next argument through *argv : techcodeview.com>
Čo je Python **kwargs?
Špeciálna syntax **kwargs v definíciách funkcií v Pythone sa používa na odovzdanie zoznamu argumentov s premenlivou dĺžkou s kľúčovými slovami. Používame názov kwargovia s dvojitou hviezdou. Dôvodom je, že dvojitá hviezdička nám umožňuje prechádzať argumentmi kľúčových slov (a ľubovoľným počtom z nich).
- Argument kľúčového slova je miesto, kde zadávate názov premennej, keď ju odovzdávate do funkcie.
- Jeden môže myslieť na kwargovia ako slovník, ktorý mapuje každé kľúčové slovo na hodnotu, ktorú mu odovzdávame. To je dôvod, prečo keď iterujeme cez kwargovia Zdá sa, že neexistuje žiadne poradie, v ktorom boli vytlačené.
Príklad 1:
Program Python na ilustráciu *kwargs pre premenlivý počet argumentov kľúčových slov. Tu **kwargs akceptujú kľúčový argument s premennou dĺžkou odovzdaný volaním funkcie. for first=’Geeks’ first je kľúč a ‘Geeks’ je hodnota. jednoducho povedané, to, čo pridelíme, je hodnota a kľúčové je, komu pridelíme.
rekurzia v javePython
def myFun(**kwargs): for key, value in kwargs.items(): print('%s == %s' % (key, value)) # Driver code myFun(first='Geeks', mid='for', last='Geeks')>
Výkon:
first == Geeks mid == for last == Geeks>
Príklad 2:
Program Python na ilustráciu **kwargov pre premenlivý počet argumentov kľúčových slov s jedným argumentom navyše. To isté, ale jednou zmenou je, že odovzdávame argument bez kľúčového slova, ktorý je prijateľný pomocou pozičného argumentu (arg1 v myFun). a argumenty kľúčových slov, ktoré odovzdávame, sú prijateľné pre **kwargs. jednoduché nie?
Python def myFun(arg1, **kwargs): for key, value in kwargs.items(): print('%s == %s' % (key, value)) # Driver code myFun('Hi', first='Geeks', mid='for', last='Geeks')>
Výkon:
first == Geeks mid == for last == Geeks>
Použitie *args aj **kwargs v Pythone na volanie funkcie
Príklad 1:
Tu odovzdávame *args a **kwargs ako argument vo funkcii myFun. Odovzdávanie *args do myFun jednoducho znamená, že odovzdávame pozičné argumenty a argumenty s premennou dĺžkou, ktoré obsahujú argumenty. takže Geeks prihrávajú na arg1 , na prechod na arg2 a Geeks prihrávajú na arg3. Keď odovzdáme **kwargs ako argument do myFun, znamená to, že akceptuje argumenty kľúčových slov. Tu je kľúčom arg1 a hodnota je Geeks, ktorá sa odovzdá do arg1, a rovnako tak pre a Geeks prejde do arg2 a arg3. Po odovzdaní všetkých údajov vytlačíme všetky údaje v riadkoch.
pytón def myFun(arg1, arg2, arg3): print('arg1:', arg1) print('arg2:', arg2) print('arg3:', arg3) # Now we can use *args or **kwargs to # pass arguments to this function : args = ('Geeks', 'for', 'Geeks') myFun(*args) kwargs = {'arg1': 'Geeks', 'arg2': 'for', 'arg3': 'Geeks'} myFun(**kwargs)>
Výkon:
arg1: Geeks arg2: for arg3: Geeks arg1: Geeks arg2: for arg3: Geeks>
Príklad 2:
Tu odovzdávame *args a **kwargs ako argument vo funkcii myFun. kde „geeks“, „pre“, „geeks“ sa odovzdáva ako *args a first=Geeks, mid=for, last=Geeks sa odovzdáva ako **kwargs a tlač v rovnakom riadku.
pytón def myFun(*args, **kwargs): print('args: ', args) print('kwargs: ', kwargs) # Now we can use both *args ,**kwargs # to pass arguments to this function : myFun('geeks', 'for', 'geeks', first='Geeks', mid='for', last='Geeks')>
Výkon:
args: ('geeks', 'for', 'geeks') kwargs: {'first': 'Geeks', 'mid': 'for', 'last': 'Geeks'}>
Použitie *args a **kwargs v Pythone na nastavenie hodnôt objektu
Príklad 1: použitie Pythonu *args
Python # defining car class class Car(): # args receives unlimited no. of arguments as an array def __init__(self, *args): # access args index like array does self.speed = args[0] self.color = args[1] # creating objects of car class audi = Car(200, 'red') bmw = Car(250, 'black') mb = Car(190, 'white') # printing the color and speed of the cars print(audi.color) print(bmw.speed)>
Výkon:
red 250>
Príklad 2: použitie Pythonu **kwargs
Python # defining car class class Car(): # args receives unlimited no. of arguments as an array def __init__(self, **kwargs): # access args index like array does self.speed = kwargs['s'] self.color = kwargs['c'] # creating objects of car class audi = Car(s=200, c='red') bmw = Car(s=250, c='black') mb = Car(s=190, c='white') # printing the color and speed of cars print(audi.color) print(bmw.speed)>
Výkon:
red 250>