В этом модуле мы углубимся в работу с функциями в Python и изучим **параметры по умолчанию** (default parameters). Вы узнаете, как делать аргументы функции необязательными, в каком порядке их нужно объявлять и как избежать распространенных ловушек при использовании изменяемых типов данных в качестве значений по умолчанию.
Вам предстоит:
Написывать функции с необязательными аргументами.
Исправлять синтаксические ошибки, связанные с порядком аргументов.
Предсказывать поведение функций при различных способах вызова.
Разбираться с "подводными камнями" изменяемых значений (mutable defaults).
Задания расположены от простых синтаксических конструкций до более сложных логических задач. Удачи!
- Модуль 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: Продвинутые возможности
Объявление значения по умолчанию
Допишите определение функции `greet`, чтобы аргумент `greeting` имел значение по умолчанию "Hello". Если при вызове приветствие не передано, должно использоваться стандартное.
def greet(name, greetinginput1Sinput2S):
print(f"{greeting}, {name}!")
# Тесты
greet("Alice") # Вывод: Hello, Alice!
greet("Bob", "Hi") # Вывод: Hi, Bob!Ошибка порядка аргументов
Интерпретатор Python выдает `SyntaxError` при попытке запуска этого кода. Найдите строку с ошибкой в определении функции и исправьте порядок аргументов.
# Функция расчета итоговой ценыdef calculate_total(tax=0.05, price): return price * (1 + tax) print(calculate_total(100))Результат вызова с аргументами
Проанализируйте код функции `power`. Что выведет программа при вызове `power(3)`? Обратите внимание на значение аргумента `exp` по умолчанию.
def power(base, exp=2):
return base ** exp
result = power(3)
print(result)Допустимые и недопустимые заголовки
Распределите заголовки функций на две категории: те, которые Python примет (Valid), и те, которые вызовут ошибку синтаксиса (Invalid).
def func(a, b=2, c=3):def func(a=1, b, c=3):def func(a=1, b=2, c=3):def func(a, b, c=3):def func(a=1, b=2, c):Создание функции connect
Соберите код функции, которая имитирует подключение к серверу. Порт по умолчанию должен быть 80. Строка вызова функции должна использовать стандартный порт.
print(f"Connecting to {host}:{port}")connect("google.com")def connect(host, port=80):connect("google.com", port=8080)def connect(port=80, host):Сопоставьте вызов функции и результат
Дана функция:
`def shop(item, qty=1, shop="Mall"):`
`return f"{qty} {item} from {shop}"`
Сопоставьте код вызова с возвращаемой строкой.
shop("Banana", 5)shop("Pizza", shop="Mario", qty=2)shop("Apple")Ловушка с изменяемым списком
Это классический вопрос на собеседованиях. Что выведет последний `print`?
Значение по умолчанию для списка создается **один раз** при определении функции, а не при каждом вызове.
def add_item(item, cart=[]):
cart.append(item)
return cart
print(add_item("Apple")) # Выведет ['Apple']
print(add_item("Banana")) # Что выведет здесь?Правильная реализация списка по умолчанию
Чтобы избежать проблемы из предыдущего задания, принято использовать `None` в качестве значения по умолчанию. Заполните пропуски, чтобы функция создавала новый список, если аргумент не передан.
def add_item(item, cart=input1S):
if cart is input2S:
cart = []
cart.append(item)
return cartВычисление с разными типами аргументов
Функция `calculate` принимает три аргумента. Вычислите, что вернет вызов функции внизу. Введите только число.
def calculate(a, b=10, c=1):
return (a + b) * c
result = calculate(5, c=2)
print(result)