Параметри і аргументи
Часто функція використовується для обробки даних, отриманих із зовнішнього для неї середовища (наприклад, з основної гілки програми). Дані передаються функції при її виклику в дужках і називаються аргументами. Однак, щоб функція могла "взяти" передані їй дані, необхідно при її створенні описати параметри що представляють собою локальні змінні. Параметри вказуються при визначенні функції у круглих дужках і роздіюяються комами.
Коли функція викликається, конкретні аргументи підставляються замість параметрів-змінних. Майже завжди кількість аргументів і параметрів має збігатися.
Напишемо функцію з одним параметром:
def say_hello(name):
print('Hello,', name)
say_hello('Вася')
say_hello('Петя')
Ми визначили функцію "say_hello" з одним параметром "name". Потім викликали цю функцію з аргументом "Вася" і ще раз з аргументом "Петя". У результаті виконання даного коду отримаємо наступне:
Hello, Вася
Hello, Петя
>>>
Зверніть увагу на термінологію: імена, вказані в оголошенні функції, називаються параметрами, тоді як значення, що передаються в функцію при її виклику, – аргументами.
Якщо параметрів у функції більше одного, перераховуємо їх через кому:
def print_salary(name, base_salary):
salary = base_salary - base_salary * 0.17 # -17% tax
print(name, ':', salary)
print_salary('Вася', 1000)
Коли функція викликається, аргументи підставляються замість параметрів у порядку, визначеному при оголошенні функції. Запустивши вищенаведений код отримаємо:
Вася : 830.0
>>>
Функції передають таку ж кілкість аргументів, як і кількість параметрів:
>>> print_salary('Вася')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: print_salary() missing 1 required positional argument: 'base_salary'
>>>
Помилку можна прочитати так:
При виклику функції print_salary пропущено 1 обов'язковий аргумент: 'base_salary'
>>> print_salary('Вася', 1000, 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: print_salary() takes 2 positional arguments but 3 were given
>>>
Читаємо так:
Функція print_salary приймає 2 аргументи, а передано 3