В этом модуле мы погрузимся в гибкость функций Python, изучая специальные синтаксические конструкции *args и **kwargs. Вы узнаете, как создавать универсальные функции, способные принимать разное количество параметров, поймете разницу между позиционными и именованными аргументами в контексте упаковки данных.
Мы разберем:
- Как упаковывать лишние позиционные аргументы в кортеж.
- Как собирать именованные аргументы в словарь.
- Правильный порядок определения параметров.
- Распаковку списков и словарей при вызове функций.
Задания варьируются от простого заполнения пропусков до поиска ошибок в структуре функций и предсказания результата работы кода. Будьте внимательны к типам данных (кортежи vs словари) и синтаксису звездочек.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Определение функции с произвольным числом аргументов
Напишите определение функции, которая принимает любое количество позиционных аргументов. Внутри функции эти аргументы доступны как кортеж. Обратите внимание: при использовании переменной внутри функции звездочка уже не ставится.
def show_items(input1S):
print(f"Получено {len(input2S)} элементов")
for item in input2S:
print(item)
show_items(1, 2, 3, 4)Определите типы данных контейнеров
Функция принимает как позиционные, так и именованные аргументы через специальные конструкции. Проанализируйте код и выберите, какой вывод он сгенерирует, основываясь на типах данных, в которые Python упаковывает эти аргументы.
def check_types(*args, **kwargs):
print(type(args))
print(type(kwargs))
check_types(1, 2, a=3, b=4)Перебор именованных аргументов
Допишите код функции, которая принимает произвольное количество именованных аргументов и выводит их ключи и значения.
def print_config(input1S):
for key, value in input2S.items():
print(f"{key}: {value}")
print_config(host='localhost', port=8080)Распределение аргументов при вызове
Дана функция `def complex_func(a, *args, **kwargs):`. Распределите значения из вызова функции `complex_func(10, 20, 30, mode='fast', level=5)` по соответствующим переменным внутри функции.
Соберите функцию-сумматор
Составьте функцию `total_sum`, которая принимает любое количество чисел и возвращает их сумму. В наборе есть лишняя строка с неверным синтаксисом цикла.
def total_sum(*numbers): result = 0 for num in numbers: result += num return result for num in *numbers:Порядок параметров в определении функции
В Python порядок определения параметров функции строго регламентирован. Расставьте части определения функции в правильном порядке, чтобы код был синтаксически верным.
def super_func(required,*args,default=None,**kwargs): passСопоставьте оператор и его действие
Сопоставьте символы звездочек с их значением в разных контекстах (определение функции и вызов функции).
позиционных аргументов в кортежименованных аргументов в словарьсписка/кортежа в отдельные аргументысловаря в именованные аргументыИсправьте синтаксическую ошибку
В этом определении функции нарушен порядок специальных аргументов, что вызовет ошибку `SyntaxError`. Исправьте строку определения.
def processor(data, **kwargs, *args): print(data) print(args) print(kwargs)Результат распаковки словаря
У нас есть функция, которая форматирует строку по шаблону. Что выведет код при использовании распаковки словаря?
def introduce(name, job):
print(f"I am {name} the {job}")
user = {'name': 'Bob', 'job': 'Builder'}
introduce(**user)Написание функции-обертки (Wrapper)
Заполните пропуски, чтобы создать функцию `wrapper`, которая принимает ЛЮБЫЕ аргументы, печатает сообщение 'Log', а затем вызывает оригинальную функцию `func` с этими же аргументами без изменений. Это классический пример использования `*args` и `**kwargs`.
def func(a, b, c=3):
return a + b + c
def wrapper(input1S, input2S):
print('Log')
return func(input3S, input4S)