Változóargumentumok használata a Pythonban

Befejeződött

A Pythonban tetszőleges számú argumentumot és kulcsszóargumentumot használhat anélkül, hogy mindegyiküket deklarálja. Ez a képesség akkor hasznos, ha egy függvény ismeretlen számú bemenetet kap.

Változóargumentumok

A függvényekben argumentumokra van szükség. Változó argumentumok használata esetén azonban a függvény tetszőleges számú argumentumot (beleértve ) 0ad át. A változóargumentumok használatának szintaxisa egyetlen csillag (*) előtagja az argumentum neve előtt.

Az alábbi függvény a kapott argumentumokat nyomtatja ki:

def variable_length(*args):
    print(args)

Megjegyzés:

Nem szükséges változóargumentumokat argsmeghívni. Bármilyen érvényes változónevet használhat. Bár gyakran előfordul, hogy ugyanazt *args*aa konvenciót használja egy projektben.

Ebben az esetben a függvény arra utasítja a függvényt, *args hogy fogadjon el tetszőleges számú argumentumot (beleértve azokat is 0). A függvényen args belül már elérhető az összes argumentumot rekordként tartalmazó változóként. Próbálja ki a függvényt tetszőleges szám vagy argumentumtípus megadásával:

variable_length()
()
variable_length("one", "two")
('one', 'two')
variable_length(None)
(None,)

Mint látható, nincs korlátozás az átadott argumentumok számára vagy típusára.

Egy rakétahajó több lépésen megy keresztül a kilövés előtt. A tevékenységektől és a késéstől függően ezek a lépések a tervezettnél hosszabb időt is igénybe vehetnek. Hozzunk létre egy változó hosszúságú függvényt, amely kiszámítja, hogy hány perc telik el az indításig, figyelembe véve, hogy az egyes lépések mennyi időt vesznek igénybe:

def sequence_time(*args):
    total_minutes = sum(args)
    if total_minutes < 60:
        return f"Total time to launch is {total_minutes} minutes"
    else:
        return f"Total time to launch is {total_minutes/60} hours"

Próbálja ki a függvényt tetszőleges számú perc végrehajtásával:

sequence_time(4, 14, 18)
Total time to launch is 36 minutes.
sequence_time(4, 14, 48)
Total time to launch is 1.1 hours.

Megjegyzés:

Változóargumentumok használatakor a rendszer már nem rendel hozzá változónevet minden értékhez. Most már minden érték a csillagot használó catch-all változónév része (args ezekben a példákban).

Változó kulcsszóargumentumok

Ahhoz, hogy egy függvény tetszőleges számú kulcsszóargumentumot fogadjon el, hasonló szintaxist használ. Ebben az esetben kettős csillagra van szükség:

def variable_length(**kwargs):
    print(kwargs)

Próbálja ki a példafüggvényt, amely az átadott neveket és értékeket a következőképpen kwargsnyomtatja ki:

variable_length(tanks=1, day="Wednesday", pilots=3)
{'tanks': 1, 'day': 'Wednesday', 'pilots': 3}

Ha már ismeri a Python-szótárakat, láthatja, hogy a változó hosszúságú kulcsszóargumentumok szótárként vannak hozzárendelve. A változókkal és értékekkel való interakcióhoz használja ugyanazt a műveletet, mint egy szótár.

Megjegyzés:

A változó argumentumokhoz hasonlóan nem szükséges változó kulcsszóargumentumokat használnia kwargs . Bármilyen érvényes változónevet használhat. Bár gyakran előfordul, hogy ugyanazt **kwargs**kwa konvenciót használja egy projektben.

Ebben a függvényben használjunk változó kulcsszóargumentumokat a küldetéshez rendelt űrhajósok jelentéséhez. Mivel ez a függvény tetszőleges számú kulcsszóargumentumot engedélyez, a hozzárendelt űrhajósok számától függetlenül újra felhasználható:

def crew_members(**kwargs):
    print(f"{len(kwargs)} astronauts assigned for this mission:")
    for title, name in kwargs.items():
        print(f"{title}: {name}")

Próbálja ki az Apolló 11 legénységével:

crew_members(captain="Neil Armstrong", pilot="Buzz Aldrin", command_pilot="Michael Collins")
3 astronauts assigned for this mission:
captain: Neil Armstrong
pilot: Buzz Aldrin
command_pilot: Michael Collins

Mivel a kulcsszóargumentumok bármilyen kombinációját átadhatja, ügyeljen arra, hogy elkerülje az ismétlődő kulcsszavakat. Az ismétlődő kulcsszavak hibát eredményeznek:

crew_members(captain="Neil Armstrong", pilot="Buzz Aldrin", pilot="Michael Collins")
  File "<stdin>", line 1
SyntaxError: keyword argument repeated: pilot