Функции: def, return, параметры

⏱ 30 мин · 🧩 заданий: 5

Зачем функции

Функция — именованный кусок кода, который можно вызывать много раз. Функции:

  • убирают повторы (принцип DRY — Don't Repeat Yourself);
  • дают имя действию: calculate_tax(price) понятнее десяти строк формул;
  • разбивают программу на части, которые легко тестировать по отдельности.
def square(x):
    """Вернуть квадрат числа."""
    return x * x

print(square(5))
print(square(square(3)))

Нажмите 👣 Пошагово: визуализатор покажет, как при вызове появляется новый кадр square() со своей переменной x, а после return кадр исчезает.

Параметры и return

def rectangle(width, height):
    area = width * height
    perimeter = 2 * (width + height)
    return area, perimeter        # возвращается кортеж

a, p = rectangle(3, 4)            # распаковка
print(a, p)
print(rectangle(3, 4))
  • return завершает функцию и возвращает значение.
  • Можно вернуть «несколько значений» — на самом деле это один кортеж.
  • Без return (или с пустым return) функция возвращает None.
def sign(x):
    if x > 0:
        return "плюс"
    if x < 0:
        return "минус"
    # здесь return нет → None

print(sign(5), sign(-1), sign(0))

print — не return

print выводит на экран, но функция при этом возвращает None. Если результат нужен дальше в программе — используйте return. Частая ошибка новичков в тестовых заданиях.

Аргументы: позиционные, именованные, по умолчанию

def order(item, qty=1, price=100):
    return f"{item}: {qty} шт × {price} = {qty * price}"

print(order("ручка"))                    # qty и price по умолчанию
print(order("тетрадь", 3))               # позиционно
print(order("карандаш", price=20))       # по имени — можно пропустить qty
print(order(price=50, item="ластик", qty=2))   # порядок именованных не важен

Параметры со значением по умолчанию идут после обязательных.

Не используйте изменяемые значения по умолчанию

def add(item, items=[]): — список создаётся один раз при определении функции и общий для всех вызовов. Пишите items=None и внутри if items is None: items = []. Это одна из самых частых ловушек на собеседованиях — разберём её подробно в уроке «Классические ловушки».

Docstring

Первая строка-литерал в теле — строка документации. Её показывают help(), IDE и генераторы документации.

def celsius_to_fahrenheit(c):
    """Перевести температуру из градусов Цельсия в Фаренгейты.

    >>> celsius_to_fahrenheit(100)
    212.0
    """
    return c * 9 / 5 + 32

print(celsius_to_fahrenheit.__doc__)
help(celsius_to_fahrenheit)

Функции — это объекты

Функцию можно положить в переменную, список, словарь, передать в другую функцию:

def hello():
    return "привет"

say = hello                  # без скобок — сам объект функции
print(say(), say.__name__, type(say))

operations = {"+": lambda a, b: a + b, "*": lambda a, b: a * b}
print(operations["*"](6, 7))

def apply_twice(func, x):
    return func(func(x))

print(apply_twice(lambda n: n * 10, 3))

Это основа для функций высшего порядка и декораторов — мы вернёмся к ним в модуле «Функции глубже».

Локальные переменные

Переменные, созданные внутри функции, локальны: снаружи их не видно, и они исчезают после возврата.

def f():
    secret = 42
    return secret

print(f())
print(secret)      # NameError: name 'secret' is not defined

Хорошая функция

  • Делает одну вещь, и её имя — глагол, описывающий эту вещь: parse_date, send_email.
  • Небольшая — обычно до 20–30 строк.
  • Получает данные через параметры и отдаёт через return, а не через глобальные переменные.
  • Не печатает, если её задача — вычислить (так её проще тестировать и переиспользовать).

Итог

  • def имя(параметры): + тело с отступом; return возвращает значение и завершает функцию.
  • Без return функция возвращает None; несколько значений — это кортеж.
  • Аргументы: позиционные, именованные, со значением по умолчанию (не изменяемым!).
  • Docstring — документация функции; функции — объекты, их можно передавать.

Практика решено 0 из 5

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Программа на Python

Напишите функцию bmi(weight, height), которая возвращает индекс массы тела: вес (кг), делённый на квадрат роста (м), округлённый до 1 знака.

Какие тесты проверяют код (2)
assert bmi(70, 1.75) == 22.9
assert bmi(90, 1.8) == 27.8
Задание 2 Программа на Python

Напишите функцию min_max(nums), которая возвращает два значения — минимум и максимум списка — не используя встроенные min и max. Для пустого списка верните (None, None).

Какие тесты проверяют код (4)
assert min_max([3, 1, 4, 1, 5, 9, 2]) == (1, 9)
assert min_max([7]) == (7, 7)
assert min_max([]) == (None, None)
assert min_max([-5, -2]) == (-5, -2)
Задание 3 Один вариант ответа

Что вернёт функция без return?

def greet(name):
    print(f"Привет, {name}")

result = greet("Аня")
Задание 4 Программа на Python

Напишите функцию make_greeting(name, greeting="Привет", punctuation="!"), которая возвращает строку "<greeting>, <name><punctuation>". Параметры greeting и punctuation имеют значения по умолчанию.

Какие тесты проверяют код (3)
assert make_greeting("Оля") == "Привет, Оля!"
assert make_greeting("Оля", "Здравствуйте") == "Здравствуйте, Оля!"
assert make_greeting("Оля", punctuation="?") == "Привет, Оля?"
Задание 5 Один вариант ответа

Чем параметр отличается от аргумента?

Войдите, чтобы отмечать пройденные уроки.