11.1 Безкінечна кількість параметрів
В Python функції можуть бути розроблені так, щоб приймати безкінечну кількість параметрів. Це досягається з допомогою аргументів, переданих через *args для звичайних параметрів і **kwargs для параметрів, заданих по імені.
Використання *args
*args дозволяє функції приймати довільну кількість позиційних аргументів, які функція буде сприймати як кортеж. Приклад використання:
def print_all(*args):
for item in args:
print(item)
print_all(1, 'apple', True) # виведе 1, apple і True.
Змінна args буде містити кортеж всіх параметрів, які були передані в функцію при її виклику.
Використання **kwargs
**kwargs працює аналогічно *args, але для аргументів, заданих по імені, представлених у вигляді словника. Це дозволяє функції приймати будь-яку кількість іменованих аргументів:
def print_named_items(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_named_items(fruit='apple', number=1) # виведе fruit: apple і number: 1
Ці механізми роблять функції надзвичайно гнучкими і корисними в сценаріях, де кількість параметрів не відома заздалегідь, наприклад, при розробці API або функцій обробки подій.
Більш детально обидва ці випадки ми розглянемо пізніше, але ви повинні знати, що в Python всередині функції можна дуже легко отримати доступ до всіх аргументів, які в неї передали. А передавати в функцію можна все, що забажаєте.
11.2 Вказівка типів
Як ви знаєте, у змінних в Python немає заздалегідь вказаного типу. Будь-якій змінній можна присвоїти значення будь-якого типу, а в наступному рядку присвоїти значення нового типу і т.д.
Це дуже зручно для маленьких програм і не дуже зручно для великих. Коли програма дуже велика і кількість функцій йде на тисячі, програміст не може запам'ятати, які саме дані потрібно передавати в функцію і в якому порядку.
В мовах зі статичною типізацією IDE сама підказує програмістам, які параметри і з якими типами потрібно передати при виклику функції. А Python – це все-таки мова з динамічною типізацією, і тут таким підказкам взятися нізвідки.
Тому творці Python придумали таку річ, як type hinting. Це щось на кшталт типів змінних, але вони швидше рекомендації, ніж типи. Жодних обмежень вказані типи не несуть.
Вказівка типів була введена в Python 3.5 і стала популярною завдяки стандарту PEP 484. Це механізм, який дозволяє програмістам визначати очікувані типи змінних, аргументів і повертаємих значень функцій.
Хоча Python залишається динамічно типізованою мовою, вказівка типів додає ясність і підтримує статичну перевірку типів. Приклади вказівки типів:
def add_numbers(a: int, b: int) -> int:
return a + b
Тип змінної вказується через двокрапку, а тип повертаємого результату функції через стрілочку.
Плюси, які дає вказівка типу-рекомендації:
- Покращення документації: Явна вказівка типів робить код самодокументованим.
- Краще автодоповнення: Редактори коду можуть використовувати інформацію про типи для покращення автодоповнення.
- Допомога в налагодженні: Статична перевірка типів може виявляти потенційні помилки ще до виконання програми.
Інструменти для роботи з типами
Сам Python ніяк не реагує на оголошені типи змінних. Натомість у Python є спеціальна утиліта — mypy — популярний статичний аналізатор типів, який допомагає відловлювати помилки в коді, що використовує вказівку типів.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ