Python дозволяє аргументам функції мати значення за замовчуванням. Якщо функція викликається без аргументу, аргумент отримує значення за умовчанням.
Аргументи за замовчуванням:
Python має інший спосіб представлення синтаксису та значень за замовчуванням для аргументів функції. Значення за замовчуванням вказують на те, що аргумент функції прийматиме це значення, якщо під час виклику функції не передано значення аргументу. Значення за замовчуванням призначається за допомогою оператора assignment(=) форми ключове ім'я = значення.
Давайте зрозуміємо це через функцію студент . Функція студент містить 3 аргументи, з яких 2 аргументам присвоєно значення за замовчуванням. Отже, функція студент приймає один необхідний аргумент ( ім'я ), а інші два аргументи необов’язкові.
Python3
def> student(firstname, lastname>=>'Mark'>, standard>=>'Fifth'>):> >print>(firstname, lastname,>'studies in'>, standard,>'Standard'>)> |
>
>
Під час виклику функцій ми повинні пам’ятати про наступні моменти:
- У разі передачі ключових аргументів важливий порядок аргументів.
- Для одного параметра має бути лише одне значення.
- Передана назва ключового слова має збігатися з фактичною назвою ключового слова.
- У випадку виклику функції, що містить аргументи, не пов’язані з ключовими словами, порядок є важливим.
Приклад №1: Виклик функцій без ключових аргументів
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'>)> |
>
>
Вихід:
John Mark studies in Fifth Standard John Gates studies in Seventh Standard John Gates studies in Fifth Standard John Seventh studies in Fifth Standard>
У першому виклику є лише один обов’язковий аргумент, а решта аргументів використовують значення за замовчуванням. У другому дзвінку, прізвище і значення стандартних аргументів замінюється зі значення за замовчуванням на нове значення передачі. Ми бачимо, що порядок аргументів важливий із 2-го, 3-го та 4-го викликів функції.
Приклад №2: виклик функцій із ключовими аргументами
Python3
як прибрати перший символ в excel
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'>)> |
>
>
Вихід:
John Mark studies in Fifth Standard John Mark studies in Seventh Standard John Gates studies in Fifth Standard>
У першому виклику є лише один обов’язковий аргумент ключового слова. У другому виклику один є обов’язковим аргументом, а інший – необов’язковим (стандартним), чиє значення замінюється з типового на нове передане значення. У третьому виклику ми бачимо, що порядок в аргументі ключового слова не важливий.
Приклад №3: деякі недійсні виклики функцій
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'>)> |
>
>
Наведений вище код видасть помилку, оскільки:
- Під час першого виклику значення параметра не передається ім'я який є необхідним параметром.
- У другому виклику після аргументу ключового слова є аргумент, що не є ключовим словом.
- Під час третього виклику переданий аргумент ключового слова не збігається з фактичними аргументами імені ключового слова.
Використання змінних об’єктів як значень аргументів за замовчуванням у python
Робити це потрібно дуже акуратно. Причина в тому, що стандартні значення аргументів обчислюються лише один раз, коли елемент керування досягає функції
Визначення вперше. Після цього на ті самі значення (або змінні об’єкти) посилаються в наступних викликах функцій.
На прикладі все буде набагато зрозуміліше
Python3
# 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'>))> |
>
>Вихід
['notebook'] ['notebook', 'pencil'] ['notebook', 'pencil', 'eraser']>
Що ви очікували, якщо припустити, що новий список створюється під час кожного виклику функції, коли ми не передаємо йому список
[‘блокнот’]
[‘олівець’]
['гумка']
Але, як ви бачите у фактичних результатах програми кожного разу, коли викликається функція, використовується той самий список, новий список не створюється під час нового виклику.
Приклад використання словника
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>))> |
>
>Вихід
{'notebook': 4} {'notebook': 4, 'pencil': 1} {'notebook': 4, 'pencil': 1, 'eraser': 1}> Що ви очікували, якщо припустити, що новий словник створюється під час кожного виклику функції
{‘блокнот’: 4}
{‘олівець’: 1}
{‘ластик’: 1}
Але ви можете чітко бачити, що фактичний результат програми відрізняється, і це вказує на використання того самого словника під час кожного наступного виклику.
Головний висновок тут полягає в тому, що ми повинні уникати таких сценаріїв.
Кращі практики
Призначте значення за замовчуванням як none, а потім перевірте у функції, чи очікуваний список або аргумент словника є none чи ні.
Якщо його немає, призначте йому список або словник залежно від ваших вимог.
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>))> |
>
>Вихід
#list ['notebook'] ['pencil'] ['eraser'] #dictionary {'notebook': 4} {'pencil': 1} {'eraser': 1}> Тут ви можете чітко побачити, що кожного разу, коли функція викликається, а список або словник не передається як аргумент функції, тоді створюється новий список або словник.