Этот урок посвящен одной из фундаментальных тем в Python — работе с аргументами функций. Вы узнаете, чем отличаются позиционные аргументы от именованных (keyword arguments), как их правильно смешивать в одном вызове и почему порядок имеет значение. Мы разберем типичные ошибки, такие как передача позиционного аргумента после именованного, и научимся писать читаемый и безопасный код.
Задания выстроены от простого к сложному: сначала мы закрепим терминологию и синтаксис, затем перейдем к поиску ошибок и, наконец, к написанию и сборке полноценных конструкций. Внимательно читайте условия и следите за подсказками!
- Модуль 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: Продвинутые возможности
1. Терминология: Параметры и Аргументы
Важно различать, что мы пишем при создании функции, а что — при её вызове. Сопоставьте понятия с примерами кода.
func(a=10, b=20)func(10, 20)def func(a, b):2. Важность порядка аргументов
Позиционные аргументы зависят от порядка передачи. Проанализируйте код функции, которая вычитает одно число из другого, и определите результат вызова.
def subtract(a, b):
return a - b
res = subtract(10, 3)
print(res)3. Использование именованных аргументов
Допишите вызов функции так, чтобы передать значения явно по именам параметров. Порядок именованных аргументов не важен, но имена должны совпадать с объявлением.
def create_profile(username, email):
print(f"User: {username}, Mail: {email}")
# Вызываем функцию, меняя порядок аргументов
create_profile(input1S="admin@example.com", input2S="AdminUser")4. Золотое правило: Позиционные перед именованными
В Python существует строгое правило: при вызове функции позиционные аргументы всегда должны идти перед именованными. Найдите строку, где это правило нарушено, и исправьте вызов, сделав все аргументы именованными для ясности (порядок имен при этом не важен, но сохраните логику данных).
def order(item, amount): print(f"{amount} x {item}")order(item="Pizza", 100)5. Классификация вызовов функций
Распределите примеры вызовов функции `def func(a, b, c): pass` по категориям. Обратите внимание на синтаксис.
func(1, 2, 3)func(a=1, b=2, c=3)func(1, b=2, c=3)func(a=1, 2, 3)func(1, b=2, 3)func(c=3, a=1, b=2)6. Вычисление результата со смешанными аргументами
Проследите за выполнением кода. Функция возводит число в степень. Обратите внимание, какие значения попадают в `base`, а какие в `exp`. Введите числовой результат.
def power(base, exp):
return base exp
res = power(4, exp=2)
print(res)7. Отправка сообщения
Используя банк токенов, соберите вызов функции `send_sms`, чтобы отправить сообщение 'Hello' на номер '911'. Используйте смешанный стиль: номер передайте позиционно, а текст — именованно.
def send_sms(phone, message):
print(f"To {phone}: {message}")
send_sms(input1S, input2S=input3S)8. Сборка функции с параметрами по умолчанию
Соберите код, который определяет функцию `greet` с параметром по умолчанию для приветствия, а затем вызывает её, используя только имя. Одно из выражений вызова лишнее (содержит ошибку порядка аргументов).
print(greet(name="Alice"))def greet(name, msg="Hi"): return f"{msg}, {name}"print(greet(name="Bob", "Hello"))9. Логика работы именованных аргументов
Расставьте строки кода в правильном порядке. Мы объявляем функцию расчета цены, затем вызываем её, явно указывая скидку, но полагаясь на цену по умолчанию (которой в данном коде нет, поэтому её нужно передать). В данном случае нужно вызвать функцию так, чтобы цена была 100, а скидка 10.
final_price = get_price(discount=10, price=100)def get_price(price, discount): return price - discountprint(final_price)