Elementor Header #8

37. Функции с переменным числом параметров

Добро пожаловать на тридцать седьмой урок по Python! В этом уроке мы обсудим, как создавать функции, которые могут принимать переменное количество параметров. Это позволяет создавать более гибкие функции, которые могут обрабатывать разное количество аргументов в зависимости от ситуации.

Функции с переменным числом позиционных параметров

В Python можно создавать функции, которые принимают переменное количество позиционных аргументов с помощью *args. Это позволяет функции принимать любое количество аргументов, и все они будут доступны как кортеж внутри функции.

Пример использования *args

				
					def print_args(*args):
    for arg in args:
        print(arg)

print_args(1, 2, 3)      # Вывод: 1 \n 2 \n 3
print_args('a', 'b', 'c')  # Вывод: a \n b \n c

				
			

В этом примере функция print_args принимает любое количество позиционных аргументов и выводит их по одному.

Функции с переменным числом ключевых параметров

Также можно создать функцию, которая принимает переменное количество ключевых аргументов с помощью **kwargs. Эти аргументы будут собраны в словарь, где ключами будут имена параметров, а значениями — переданные аргументы.

Пример использования **kwargs

				
					def print_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name="Alice", age=30)  # Вывод: name: Alice \n age: 30
print_kwargs(city="New York", country="USA")  # Вывод: city: New York \n country: USA

				
			

В этом примере функция print_kwargs принимает любое количество ключевых аргументов и выводит их в формате ключ: значение.

Комбинирование *args и **kwargs

Функции могут использовать и *args, и **kwargs одновременно. Порядок их использования в определении функции должен быть таким: сначала *args, затем **kwargs.

Пример комбинации *args и **kwargs

				
					def print_all_args(*args, **kwargs):
    print("Positional arguments:")
    for arg in args:
        print(arg)
    
    print("\nKeyword arguments:")
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_all_args(1, 2, 3, name="Alice", age=30)
# Вывод:
# Positional arguments:
# 1
# 2
# 3
#
# Keyword arguments:
# name: Alice
# age: 30

				
			

В этом примере функция print_all_args обрабатывает как позиционные, так и ключевые аргументы и выводит их по категориям.

Использование переменного числа параметров с аннотациями типов

В Python вы можете использовать аннотации типов даже для функций с переменным числом параметров, чтобы указать ожидаемые типы аргументов.

Пример аннотаций типов с *args и **kwargs

				
					from typing import Any, Dict, Tuple

def process_data(*args: int, **kwargs: Any) -> None:
    print("Positional arguments:")
    print(args)
    
    print("\nKeyword arguments:")
    print(kwargs)

process_data(1, 2, 3, name="Alice", age=30)
# Вывод:
# Positional arguments:
# (1, 2, 3)
#
# Keyword arguments:
# {'name': 'Alice', 'age': 30}

				
			

Здесь *args аннотирован как int, а **kwargs — как Any, что означает, что аргументы могут иметь любые типы.

Заключение

Сегодня вы узнали, как создавать функции с переменным числом параметров с помощью *args и **kwargs. Эти возможности позволяют вам писать более гибкий и универсальный код, который может обрабатывать различные наборы аргументов.

logo