У Python ви можете визначити функцію, яка приймає змінну кількість аргументів. У цій статті ви навчитеся визначати такі функції за допомогою аргументів за замовчуванням, ключових слів та довільних аргументів.
Відео: Аргументи функції Python: позиційні, ключові слова та за замовчуванням
Аргументи
У розділі користувацької функції ми дізналися про визначення функції та її виклик. В іншому випадку виклик функції призведе до помилки. Ось приклад.
def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")
Вихідні дані
Привіт Моніка, доброго ранку!
Тут функція greet()
має два параметри.
Оскільки ми викликали цю функцію з двома аргументами, вона працює гладко, і ми не отримуємо жодної помилки.
Якщо ми викликаємо його з різною кількістю аргументів, інтерпретатор покаже повідомлення про помилку. Нижче наведено виклик цієї функції з одним і без аргументів разом із відповідними повідомленнями про помилки.
>>> greet ("Monica") # лише один аргумент TypeError: greet () відсутній 1 необхідний позиційний аргумент: 'msg'
>>> greet () # немає аргументів TypeError: greet () відсутні 2 обов’язкові позиційні аргументи: 'name' і 'msg'
Аргументи змінної функції
До цього часу функції мали фіксовану кількість аргументів. У Python існують інші способи визначення функції, яка може приймати змінну кількість аргументів.
Три різні форми цього типу описані нижче.
Аргументи за замовчуванням Python
Аргументи функції можуть мати значення за замовчуванням у Python.
Ми можемо надати значення аргументу за замовчуванням, використовуючи оператор присвоєння (=). Ось приклад.
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?")
Вихідні дані
Привіт Кейт, доброго ранку! Привіт Брюсе, як справи?
У цій функції параметр name
не має значення за замовчуванням і є обов'язковим під час дзвінка.
З іншого боку, параметр msg
має значення за замовчуванням "Good morning!"
. Отже, це необов’язково під час дзвінка. Якщо вказано значення, воно замінить значення за замовчуванням.
Будь-яка кількість аргументів у функції може мати значення за замовчуванням. Але коли у нас є аргумент за замовчуванням, усі аргументи праворуч від нього також повинні мати значення за замовчуванням.
Це означає сказати, що аргументи не за замовчуванням не можуть слідувати за аргументами за замовчуванням. Наприклад, якби ми визначили заголовок функції вище як:
def greet (msg = "Доброго ранку!", ім'я):
Ми отримаємо помилку як:
SyntaxError: аргумент не за замовчуванням слідує за аргументом за замовчуванням
Аргументи ключових слів Python
Коли ми викликаємо функцію з деякими значеннями, ці значення призначаються аргументам відповідно до їх положення.
Наприклад, у наведеній вище функції greet()
, коли ми називали її як greet("Bruce", "How do you do?")
, значення "Bruce"
присвоюється імені аргументу та подібно "How do you do?"
до msg.
Python дозволяє викликати функції за допомогою аргументів ключового слова. Коли ми викликаємо функції таким чином, порядок (положення) аргументів може бути змінений. Усі наступні виклики вищезазначеної функції є дійсними і дають однаковий результат.
# 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?")
Як бачимо, під час виклику функції ми можемо змішувати позиційні аргументи з аргументами ключового слова. Але ми повинні пам’ятати, що аргументи ключових слів повинні слідувати позиційним аргументам.
Наявність позиційного аргументу після аргументів ключового слова призведе до помилок. Наприклад, виклик функції наступним чином:
greet(name="Bruce","How do you do?")
Приведе до помилки:
SyntaxError: аргумент без ключового слова після аргументу ключового слова
Довільні аргументи Python
Іноді ми не знаємо заздалегідь кількість аргументів, які будуть передані у функцію. Python дозволяє нам обробляти подібну ситуацію за допомогою викликів функцій з довільною кількістю аргументів.
У визначенні функції ми використовуємо зірочку (*) перед назвою параметра для позначення такого роду аргументів. Ось приклад.
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")
Вихідні дані
Привіт Моніка Привіт Люк Привіт Стів Привіт Джон
Тут ми викликали функцію з кількома аргументами. Ці аргументи обертаються в кортеж перед передачею у функцію. Усередині функції ми використовуємо for
цикл для отримання всіх аргументів назад.