Функция - именованный блок кода, который можно вызывать много раз.
def создаёт функцию, pass временно оставляет обязательный блок пустым.
При вызове функции позиционные аргументы сопоставляются по порядку, именованные - по названию параметра.
Аргументы по умолчанию пишутся после обязательных параметров.
*args собирает лишние позиционные аргументы в tuple, **kwargs - именованные аргументы в dict.
return завершает функцию и возвращает значение; без return результатом будет None.
LEGB описывает поиск имён: Local, Enclosing, Global, Built-in.
global нужен только для изменения глобальной переменной, но чаще лучше передавать данные параметрами.
Топ-3 ошибки: передавать не то количество аргументов; ожидать значение от функции, где нет return; менять global там, где достаточно параметров и return.
Задание 1. Конвертер температуры
Напишите функцию, которая конвертирует температуру из Цельсия в Фаренгейт и наоборот.
temp = 100
scale = "C"
Ожидаемый результат: 100C = 212.0F
Задание 2. Фильтрация списка по длине
Создайте filter_strings, которая принимает n и любое количество строк, возвращая строки длиннее n.
strings = ["apple", "banana", "cherry", "date", "fig"]
n = 5
Ожидаемый результат: ['banana', 'cherry']
Задание 3. Проверка знака числа
Напишите функцию, которая возвращает текст о том, число положительное, отрицательное или равно нулю.
num = -3
Ожидаемый результат: Число отрицательное
Задание 4. Мини-опрос
Объясните, почему def example(): pass при печати результата возвращает None.
def example():
pass
print(example())
Ожидаемый результат: None
Проверка понимания
Выберите один вариант ответа. После клика правильный ответ подсветится зелёным.
Вопрос 1
Какой стиль имён переменных обычно рекомендует PEP 8?
Вопрос 2
Зачем использовать f-strings в современном Python?
Вопрос 3
Когда полезен ранний возврат из функции?
Вопрос 4
Что делает аннотация типа в Python?
Вопрос 5
Как лучше обрабатывать ожидаемую ошибку преобразования?