*args ir **kwargs supratimas Python funkcijų apibrėžimuose

*args ir **kwargs supratimas Python funkcijų apibrėžimuose
*args ir **kwargs supratimas Python funkcijų apibrėžimuose

Tyrinėkite Python funkcijų parametrus

Python programoje norint rašyti lanksčias ir dinamines funkcijas, labai svarbu suprasti *args ir **kwargs naudojimą. Šie specialūs sintaksės elementai leidžia kūrėjams perduoti kintamą argumentų skaičių funkcijai, todėl kodą galima pakartotinai naudoti ir efektyviau.

Šiame straipsnyje išsiaiškinsime, ką reiškia simboliai * (viena žvaigždutė) ir ** (dvi žvaigždutė), kai naudojami funkcijų parametruose. Taip pat apžvelgsime praktinius pavyzdžius, kaip naudoti *args ir **kwargs įvairiems kodo scenarijams tvarkyti.

komandą apibūdinimas
*args Leidžia funkcijai priimti kintamą padėties argumentų skaičių. Argumentai perduodami kaip eilutė.
**kwargs Leidžia funkcijai priimti kintamą raktinio žodžio argumentų skaičių. Argumentai perduodami kaip žodynas.
print() Išveda nurodytą pranešimą į konsolę ar kitą standartinį išvesties įrenginį.
get() Nuskaito reikšmę, susietą su nurodytu raktu iš žodyno. Grąžina numatytąją reikšmę, jei raktas nerastas.
join() Sujungia iteruojamo elemento elementus (pvz., sąrašą arba eilutę) į vieną eilutę su nurodytu skyrikliu.
f-string Suformatuotas eilutės literatas, leidžiantis skliaustuose esančias išraiškas įvertinti vykdymo metu.

Giliai pasinerkite į *argus ir **kwargus Python

Pateikti scenarijai parodo, kaip naudoti *args ir **kwargs Python funkcijų apibrėžimuose. Pirmasis scenarijus apibrėžia funkciją foo tam reikia dviejų būtinų argumentų, x ir y, po kurio nurodomas bet koks papildomų pozicinių argumentų skaičius *args. Kai skambina foo su papildomais argumentais jie fiksuojami kaip eilutė ir išspausdinami. Tai leidžia funkcijai grakščiai tvarkyti įvairų skaičių argumentų. Antroji funkcija, bar, priima du būtinus argumentus ir bet kokį raktinio žodžio argumentų skaičių per **kwargs. Šie raktinių žodžių argumentai surenkami į žodyną, leidžiantį funkcijai apdoroti lanksčias pavadintas įvestis.

Antrasis scenarijaus pavyzdys pristato example_function ir greet funkcijos, kurios toliau iliustruoja naudojimą *args ir **kwargs. The example_function spausdina pozicinius ir raktinių žodžių argumentus, atitinkamai rodydamas jų rinkinį į eilutes ir žodynus. The greet funkcija pabrėžia praktinį naudojimo atvejį, kai **kwargs leidžia pasirinktinius raktinio žodžio argumentus, pvz., tinkinamą sveikinimo pranešimą. Naudojant svertą get() ant kwargs žodyną, funkcija gali pateikti numatytąją reikšmę, kai nepateikiamas sveikinimo raktinis žodis, parodydama šių konstrukcijų naudojimo lankstumą ir galią realaus pasaulio scenarijuose.

*args ir **kwargs naudojimas Python funkcijose

Python

def foo(x, y, *args):
    print("Required arguments:", x, y)
    print("Additional arguments:", args)

def bar(x, y, **kwargs):
    print("Required arguments:", x, y)
    print("Keyword arguments:", kwargs)

foo(1, 2, 3, 4, 5)
# Output:
# Required arguments: 1 2
# Additional arguments: (3, 4, 5)

bar(1, 2, a=3, b=4, c=5)
# Output:
# Required arguments: 1 2
# Keyword arguments: {'a': 3, 'b': 4, 'c': 5}

*args ir **kwargs naudojimo supratimas

Python

def example_function(*args, **kwargs):
    print("Positional arguments:", args)
    print("Keyword arguments:", kwargs)

example_function(1, 2, 3, a="apple", b="banana")
# Output:
# Positional arguments: (1, 2, 3)
# Keyword arguments: {'a': 'apple', 'b': 'banana'}

def greet(name, *args, **kwargs):
    greeting = kwargs.get('greeting', 'Hello')
    print(f"{greeting}, {name}!")
    if args:
        print("Additional names:", ', '.join(args))

greet("Alice")
# Output: Hello, Alice!

greet("Alice", "Bob", "Charlie", greeting="Hi")
# Output:
# Hi, Alice!
# Additional names: Bob, Charlie

Išplėstinis *args ir **kwargs naudojimas

Be pagrindinių pavyzdžių, *args ir **kwargs gali būti neįtikėtinai galingi pažangaus Python programavimo įrankiai. Vienas išplėstinio naudojimo atvejis yra funkciniuose dekoratoriuose. Dekoratoriai yra būdas modifikuoti arba tobulinti funkcijas ar metodus nekeičiant tikrojo kodo. Naudojant *args ir **kwargs, dekoratoriai gali būti parašyti dirbti su bet kokiu argumentų skaičiumi, todėl jie yra ypač lankstūs ir pakartotinai naudojami. Pavyzdžiui, registravimo dekoratorius gali priimti bet kurią funkciją, įrašyti jos argumentus ir grąžinti reikšmę, o tada perduoti tuos argumentus pradinei funkcijai *args ir **kwargs. Tai leidžia dekoratorių naudoti su skirtingų parašų funkcijomis be jokių pakeitimų.

Kita išplėstinė programa yra klasės metodų ir paveldėjimo kontekste. Apibrėžiant bazinės klasės metodą, kuris naudoja *args ir **kwargs, išvestinės klasės gali nepaisyti šio metodo ir vis tiek priimti papildomus argumentus, jų aiškiai nenurodydami. Tai gali supaprastinti kodo priežiūrą ir padidinti lankstumą, nes bazinei klasei nereikia iš anksto žinoti visų galimų argumentų. Be to, *args ir **kwargs gali būti naudojamas argumentams persiųsti pirminės klasės metodams, užtikrinant, kad būtų išlaikytas visas pagrindinės klasės funkcionalumas plečiant arba keičiant jos elgesį.

Dažnai užduodami klausimai apie *args ir **kwargs

  1. Kas yra *args?
  2. Jie naudojami kintamam pozicinių argumentų skaičiui perduoti funkcijai.
  3. Kas yra **kwargs?
  4. Jie leidžia funkcijai perduoti kintamą raktinių žodžių argumentų skaičių.
  5. Ar galiu naudoti *args ir **kwargs kartu?
  6. Taip, galite naudoti abu toje pačioje funkcijoje, kad galėtumėte apdoroti bet kokį pozicijos ir raktinio žodžio argumentų derinį.
  7. Kaip pasiekti pateiktus argumentus *args?
  8. Funkcijos viduje jie pasiekiami kaip eilutė.
  9. Kaip pasiekti pateiktus argumentus **kwargs?
  10. Jie pasiekiami kaip funkcijos žodynas.
  11. Kodėl turėčiau naudoti *args?
  12. Leisti funkcijai priimti bet kokį pozicijos argumentų skaičių, padidinant jos lankstumą.
  13. Kodėl turėčiau naudoti **kwargs?
  14. Priimti bet kokį raktinių žodžių argumentų skaičių, todėl funkcija gali būti universalesnė.
  15. Gali *args ir **kwargs pavadinti kitaip?
  16. Taip, pavadinimai yra sutartiniai, bet galite juos pavadinti kaip tik norite.
  17. Koks yra praktinis naudojimo pavyzdys *args?
  18. Kelių reikšmių perdavimas funkcijai, kuri jas apibendrina.
  19. Koks yra praktinis naudojimo pavyzdys **kwargs?
  20. Sukurti funkciją, kuri sukuria žodyną iš raktinių žodžių argumentų.

Apvyniojimas *argais ir **kwargais

Supratimas ir panaudojimas *args ir **kwargs Python funkcijos gali žymiai pagerinti jūsų programavimo įgūdžius. Šie įrankiai suteikia didelį funkcijų apibrėžimų lankstumą, leidžiantį rašyti dinamiškesnį ir daugkartinį kodą. Įvaldę šias sąvokas, savo funkcijose galite tvarkyti daugybę argumentų, todėl jūsų kodas tampa labiau pritaikomas ir lengviau prižiūrimas.

Nesvarbu, ar rašote dekoratorius, tvarkote paveldėjimą pamokose, ar tiesiog norite pateikti nežinomą skaičių argumentų, *args ir **kwargs suteikti reikiamą funkcionalumą. Eksperimentuokite su šiomis funkcijomis, kad atskleistumėte visą jų potencialą ir integruotumėte jas į savo kodavimo praktiką, kad galėtumėte efektyviau ir galingiau programuoti Python.