logo

Výchozí argumenty v Pythonu

Python umožňuje, aby argumenty funkcí měly výchozí hodnoty. Pokud je funkce volána bez argumentu, argument získá svou výchozí hodnotu.

Výchozí argumenty:

Python má jiný způsob reprezentace syntaxe a výchozích hodnot pro argumenty funkcí. Výchozí hodnoty označují, že argument funkce nabude tuto hodnotu, pokud během volání funkce není předána žádná hodnota argumentu. Výchozí hodnota je přiřazena pomocí operátoru přiřazení(=) formuláře název klíčového slova =hodnota.
Pojďme to pochopit pomocí funkce student . Funkce student obsahuje 3 argumenty, z nichž 2 jsou přiřazeny výchozí hodnoty. Takže funkce student přijímá jeden povinný argument ( jméno ) a zbývající dva argumenty jsou volitelné.



Python3








def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)>

>

>


Při volání funkcí musíme mít na paměti následující body:

Sridevi
  1. V případě předávání klíčového slova argumenty je důležité pořadí argumentů.
  2. Pro jeden parametr by měla být pouze jedna hodnota.
  3. Předaný název klíčového slova by se měl shodovat se skutečným názvem klíčového slova.
  4. V případě volání funkce obsahující neklíčové argumenty je důležité pořadí.

Příklad č. 1: Volání funkcí bez argumentů klíčových slov

Python3




def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)> # 1 positional argument> student(>'John'>)> # 3 positional arguments> student(>'John'>,>'Gates'>,>'Seventh'>)> # 2 positional arguments> student(>'John'>,>'Gates'>)> student(>'John'>,>'Seventh'>)>

>

>

Výstup:

John Mark studies in Fifth Standard John Gates studies in Seventh Standard John Gates studies in Fifth Standard John Seventh studies in Fifth Standard>

V prvním volání je pouze jeden povinný argument a ostatní argumenty používají výchozí hodnoty. Ve druhém hovoru příjmení a hodnota standardních argumentů je nahrazena z výchozí hodnoty na novou předávanou hodnotu. Vidíme, že pořadí argumentů je důležité z 2., 3. a 4. volání funkce.

Příklad č. 2: Volání funkcí s argumenty klíčových slov

Python3




def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)> # 1 keyword argument> student(firstname>=>'John'>)> # 2 keyword arguments> student(firstname>=>'John'>, standard>=>'Seventh'>)> # 2 keyword arguments> student(lastname>=>'Gates'>, firstname>=>'John'>)>

math.pow java

>

>

Výstup:

John Mark studies in Fifth Standard John Mark studies in Seventh Standard John Gates studies in Fifth Standard>

V prvním volání je pouze jeden povinný argument klíčového slova. Ve druhém volání je jeden povinný argument a jeden je volitelný (standardní), jehož hodnota je nahrazena z výchozí na novou předávanou hodnotu. Ve třetím volání vidíme, že pořadí v argumentu klíčového slova není důležité.

Příklad č. 3: Některá neplatná volání funkcí

Python3




def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)> # required argument missing> student()> # non keyword argument after a keyword argument> student(firstname>=>'John'>,>'Seventh'>)> # unknown keyword argument> student(subject>=>'Maths'>)>

>

>

Výše uvedený kód vyvolá chybu, protože:

  • Při prvním volání se hodnota parametru nepředává jméno což je požadovaný parametr.
  • Ve druhém volání je za argumentem klíčového slova argument neklíčového slova.
  • Ve třetím volání se předávací argument klíčového slova neshoduje se skutečnými argumenty názvu klíčového slova.

Použití měnitelných objektů jako výchozích hodnot argumentů v pythonu

To musí být provedeno velmi opatrně. Důvodem je, že výchozí hodnoty argumentů jsou vyhodnoceny pouze jednou, když ovládací prvek dosáhne funkce

Definice poprvé. Poté jsou stejné hodnoty (nebo měnitelné objekty) odkazovány v následných voláních funkcí.
Věci budou mnohem jasnější s příkladem

Python3

převodník řetězce na int




# mutable default argument values example using python list> # itemName is the name of the item that we want to add to list> # that is being passed, or if it is not passed then appending in> # the default list> def> appendItem(itemName, itemList>=> []):> >itemList.append(itemName)> >return> itemList> print>(appendItem(>'notebook'>))> print>(appendItem(>'pencil'>))> print>(appendItem(>'eraser'>))>

>

>

Výstup

['notebook'] ['notebook', 'pencil'] ['notebook', 'pencil', 'eraser']>

Co jste očekávali, pokud předpokládáte, že se při každém volání funkce vytvoří nový seznam, když mu nepředáme seznam

středové tlačítko v css

[‚notebook‘]

['tužka']

['guma']

Ale jak můžete vidět na skutečném výstupu programu pokaždé, když je funkce volána, je použit stejný seznam, při novém volání se nevytváří žádný nový seznam.

Příklad pomocí slovníku

Python3




# mutable default argument values example using python dictionary> # itemName is the name of item and quantity is the number of such> # items are there> def> addItemToDictionary(itemName, quantity, itemList>=> {}):> >itemList[itemName]>=> quantity> >return> itemList> print>(addItemToDictionary(>'notebook'>,>4>))> print>(addItemToDictionary(>'pencil'>,>1>))> print>(addItemToDictionary(>'eraser'>,>1>))>

>

>

Výstup

{'notebook': 4} {'notebook': 4, 'pencil': 1} {'notebook': 4, 'pencil': 1, 'eraser': 1}>

Co jste očekávali, pokud předpokládáte, že v každém volání funkce je vytvořen nový slovník

{‘notebook’: 4}

{'tužka': 1}

{'guma': 1}

Ale můžete jasně vidět, že skutečný výstup programu je jiný a naznačuje použití stejného slovníku v každém následujícím volání.

Klíčovým závěrem je, že bychom se měli takovým scénářům vyhnout.

Osvědčené postupy

Přiřaďte výchozí hodnotu jako none a poté ve funkci zkontrolujte, zda je očekávaný argument seznamu nebo slovníku none nebo ne.

Pokud není žádný, přiřaďte mu seznam nebo slovník v závislosti na vašem požadavku.

Python3




# using None as values of the default arguments> print>(>'#list'>)> def> appendItem(itemName, itemList>=>None>):> >if> itemList>=>=> None>:> >itemList>=> []> >itemList.append(itemName)> >return> itemList> print>(appendItem(>'notebook'>))> print>(appendItem(>'pencil'>))> print>(appendItem(>'eraser'>))> # using None as value of default parameter> print>(>' #dictionary'>)> def> addItemToDictionary(itemName, quantity, itemList>=> None>):> >if> itemList>=>=> None>:> >itemList>=> {}> >itemList[itemName]>=> quantity> >return> itemList> print>(addItemToDictionary(>'notebook'>,>4>))> print>(addItemToDictionary(>'pencil'>,>1>))> print>(addItemToDictionary(>'eraser'>,>1>))>

tabulka reakcí
>

>

Výstup

#list ['notebook'] ['pencil'] ['eraser'] #dictionary {'notebook': 4} {'pencil': 1} {'eraser': 1}>

Zde můžete jasně vidět, že pokaždé, když je funkce volána a seznam nebo slovník není předán jako argument funkci, vytvoří se nový seznam nebo slovník.