tariel.ge › Полезное: бесплатные книги › Программирование: от нулей и единиц до PythonБесплатно · автор Тариел Бежанидзе
← Учебник по программированию ЛИСТ 16БЛОК 3 — PYTHON: ОСНОВЫРЕВ. 1
Глава 16 · Python: основы

Функции

Прямой потомок GOSUB/RETURN из BASIC (глава 06) и процедур/функций Pascal (глава 07) — только с именованными параметрами, возвращаемыми значениями и куда большей гибкостью, чем оба исторических предка.

Определение и вызов функции

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

greet("Тариэл") # Привет, Тариэл!

def начинает определение функции, за ним — имя функции и список параметров в скобках. Тело функции, как и тело условия или цикла из главы 15, определяется отступом. Вызов функции — просто её имя со скобками, в которые передаются конкретные значения (аргументы) для параметров.

Возвращаемое значение — return

def square(number):
    return number ** 2

result = square(5)
print(result) # 25

return завершает выполнение функции и передаёт указанное значение туда, откуда функция была вызвана. Функция без явного return (как greet() выше) автоматически возвращает специальное значение None — "ничего", а не ошибка.

Параметры по умолчанию

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

greet("Тариэл") # Привет, Тариэл!
greet("Тариэл", "Добрый день") # Добрый день, Тариэл!

Параметр со значением по умолчанию можно не указывать при вызове — тогда используется заданное значение; если указать явно — оно переопределяет значение по умолчанию для этого конкретного вызова.

Область видимости — где переменная "существует"

Локальные переменные не видны снаружи функции

Переменная, созданная внутри функции, существует только внутри неё — попытка обратиться к ней за пределами функции вызовет ошибку, будто такой переменной вообще никогда не было. Это не ограничение, а полезная защита: разные функции могут свободно использовать одинаковые имена переменных внутри себя, не создавая конфликтов друг с другом — каждая живёт в собственном изолированном пространстве.

Несколько возвращаемых значений сразу

Особенность Python, которой не было ни в BASIC, ни в классическом Pascal, — функция может вернуть сразу несколько значений одним return, а вызывающий код — разложить их сразу в несколько переменных:

def min_max(numbers):
    return min(numbers), max(numbers)

smallest, largest = min_max([3, 7, 1, 9])
print(smallest, largest) # 1 9

Docstring — документация прямо внутри функции

def square(number):
    """Возвращает квадрат переданного числа."""
    return number ** 2

Строка в тройных кавычках сразу после def — принятое соглашение для описания того, что делает функция. Это не просто комментарий (глава 13) — многие инструменты (среды разработки, автоматическая генерация документации) умеют находить и показывать именно docstring при наведении на имя функции.

Зачем вообще выносить код в функцию — принцип DRY

"Не повторяйся" (Don't Repeat Yourself, DRY) — если один и тот же фрагмент логики нужен в нескольких местах программы, разумнее оформить его как функцию один раз и вызывать оттуда, чем копировать один и тот же код в нескольких местах. Изменение логики в будущем тогда потребует правки в одном месте, а не поиска всех скопированных фрагментов по всему файлу.

Забегая вперёд: *args, **kwargs и лямбда-функции

Позже встретятся и более продвинутые возможности: *args позволяет функции принимать произвольное число позиционных аргументов, **kwargs — произвольное число именованных аргументов, а лямбда-функции (lambda x: x ** 2) — короткий способ определить маленькую безымянную функцию прямо на месте использования. Для большинства задач в этой книге обычного def с явными параметрами будет более чем достаточно — эти возможности стоит знать, что они существуют, не обязательно осваивать прямо сейчас.

Что дальше

Следующая глава — структуры данных: списки, словари, кортежи и множества — то, чем оперируют функции этой главы, когда данных больше, чем одна переменная.

Глава16 — Функции
Блок3 — Python: основы
Далее17 — Списки, словари, кортежи, множества
СтатусГотово · рев. 1
Предыдущая глава ← 15 · Условия и циклы Следующая глава 17 · Списки, словари, кортежи, множества →

Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.