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

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

Відкрита

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

2
Задача
Модуль 1: Python Core,  4 рівень,  10 лекція
Недоступна
Сумуємо всі числа
Сумуємо всі числа
2
Задача
Модуль 1: Python Core,  4 рівень,  10 лекція
Недоступна
Профіль кота
Профіль кота
Коментарі (6)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
BigValera
Рівень 7
17 липня 2025, 11:21
(*args: int) -> int: не попадалось раніше, тому завдання невчасне, як на мене
Semen
Рівень 21
12 червня 2025, 11:03
print(sum_numbers(2.5, 3,-5))
Чому IDE вказує попередження, а не помилку? У випадку
print(sum_numbers(2, "3",-5))
буде помилка....
yuraku
Рівень 28
Expert
4 травня 2025, 18:43
Дуже неочевидне на перший погляд рішення з циклом в межах одного виводу *(f"{k}={v}" for k, v in kwargs.items()
Віталій
Рівень 23
16 березня 2025, 19:21
Так Максим. І це не перший раз. Але то таке... Все ж таки елегантне рішення для "Профілю кота" :) Використати метод .update для set.
Сергій
Рівень 62
16 березня 2025, 16:31
Чи може функція в Python повертати декілька значень? Функція може повертати і список, і кортеж, і словник. Я не можу зрозуміти як на це питання відповісти?
Nikolay
Рівень 11
10 листопада 2025, 07:52
в цьому тесті правильна відповідь "кортежі", але я так розумію що і список і словник теж можна повернути.