JavaRush /Курси /Модуль 1: Python Core /Просунута робота з параметрами

Просунута робота з параметрами

Модуль 1: Python Core
Рівень 4 , Лекція 10
Відкрита

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 — популярний статичний аналізатор типів, який допомагає відловлювати помилки в коді, що використовує вказівку типів.

1
Опитування
Функції в Python, рівень 4, лекція 10
Недоступний
Функції в Python
Функції в Python
Коментарі (6)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
BigValera Рівень 7
17 липня 2025
(*args: int) -> int: не попадалось раніше, тому завдання невчасне, як на мене
Semen Рівень 21
12 червня 2025

print(sum_numbers(2.5, 3,-5))
Чому IDE вказує попередження, а не помилку? У випадку

print(sum_numbers(2, "3",-5))
буде помилка....
yuraku Рівень 28 Expert
4 травня 2025
Дуже неочевидне на перший погляд рішення з циклом в межах одного виводу *(f"{k}={v}" for k, v in kwargs.items()
Віталій Рівень 23
16 березня 2025
Так Максим. І це не перший раз. Але то таке... Все ж таки елегантне рішення для "Профілю кота" :) Використати метод .update для set.
Сергій Рівень 44
16 березня 2025
Чи може функція в Python повертати декілька значень? Функція може повертати і список, і кортеж, і словник. Я не можу зрозуміти як на це питання відповісти?
Nikolay Рівень 11
10 листопада 2025
в цьому тесті правильна відповідь "кортежі", але я так розумію що і список і словник теж можна повернути.