V Pythonu můžete definovat funkci, která bere proměnný počet argumentů. V tomto článku se naučíte definovat takové funkce pomocí výchozích, klíčových slov a libovolných argumentů.
Video: Argumenty funkce Pythonu: Poziční, Klíčová slova a Výchozí
Argumenty
V tématu funkce definované uživatelem jsme se dozvěděli o definování funkce a jejím volání. Jinak bude volání funkce mít za následek chybu. Zde je příklad.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Výstup
Ahoj Moniko, dobré ráno!
Zde má funkce greet()
dva parametry.
Protože jsme tuto funkci nazvali dvěma argumenty, běží hladce a nedostává se nám žádné chyby.
Pokud jej zavoláme s jiným počtem argumentů, tlumočník zobrazí chybovou zprávu. Níže je volání této funkce s jedním a žádnými argumenty spolu s příslušnými chybovými zprávami.
>>> greet ("Monica") # pouze jeden argument TypeError: greet () chybí 1 požadovaný poziční argument: 'msg'
>>> greet () # no argumenty TypeError: greet () chybí 2 požadované poziční argumenty: 'name' a 'msg'
Argumenty proměnných funkcí
Až dosud měly funkce pevný počet argumentů. V Pythonu existují další způsoby, jak definovat funkci, která může mít proměnný počet argumentů.
Níže jsou popsány tři různé formy tohoto typu.
Výchozí argumenty Pythonu
Argumenty funkce mohou mít v Pythonu výchozí hodnoty.
Můžeme poskytnout výchozí hodnotu argumentu pomocí operátoru přiřazení (=). Zde je příklad.
def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")
Výstup
Ahoj Kate, dobré ráno! Ahoj Bruce, jak se máš?
V této funkci name
nemá parametr výchozí hodnotu a je během hovoru povinný (povinný).
Na druhou stranu má parametr msg
výchozí hodnotu "Good morning!"
. Během hovoru je tedy volitelný. Pokud je zadána hodnota, přepíše výchozí hodnotu.
Libovolný počet argumentů ve funkci může mít výchozí hodnotu. Ale jakmile máme výchozí argument, musí mít všechny argumenty napravo také výchozí hodnoty.
To znamená, že jiné než výchozí argumenty nemohou následovat výchozí argumenty. Například pokud jsme výše definovali záhlaví funkce jako:
def greet (msg = "Dobré ráno!", jméno):
Dostali bychom chybu jako:
SyntaxError: po výchozím argumentu následuje jiný než výchozí argument
Argumenty klíčových slov v Pythonu
Když zavoláme funkci s některými hodnotami, budou tyto hodnoty přiřazeny argumentům podle jejich polohy.
Například ve výše uvedené funkci greet()
, když jsme ji nazvali jako greet("Bruce", "How do you do?")
, bude hodnota "Bruce"
přiřazena názvu argumentu a podobně "How do you do?"
jako msg.
Python umožňuje volání funkcí pomocí argumentů klíčových slov. Když funkce nazýváme tímto způsobem, lze změnit pořadí (pozici) argumentů. Následující volání výše uvedené funkce jsou platná a přinášejí stejný výsledek.
# 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?")
Jak vidíme, můžeme během volání funkce kombinovat poziční argumenty s argumenty klíčových slov. Musíme si ale uvědomit, že argumenty klíčových slov musí následovat poziční argumenty.
Mít poziční argument za argumenty klíčových slov bude mít za následek chyby. Například volání funkce následovně:
greet(name="Bruce","How do you do?")
Výsledkem bude chyba:
SyntaxError: non-klíčové slovo arg po klíčovém slova arg
Libovolné argumenty Pythonu
Někdy předem neznáme počet argumentů, které budou předány do funkce. Python nám umožňuje řešit tento druh situace prostřednictvím volání funkcí s libovolným počtem argumentů.
V definici funkce používáme hvězdičku (*) před názvem parametru k označení tohoto druhu argumentu. Zde je příklad.
def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")
Výstup
Hello Monica Hello Luke Hello Steve Hello Hello John
Zde jsme funkci nazvali s více argumenty. Tyto argumenty se před předáním do funkce zabalí do n-tice. Uvnitř funkce používáme for
smyčku k načtení všech argumentů zpět.