Пользовательские функции в Python: аргументы, return и области видимости
Объявление def, позиционные и именованные аргументы, параметры по умолчанию, оператор возврата return, локальная и глобальная области видимости (LEGB).
Функция в программировании — это изолированный именованный фрагмент программного кода, решающий конкретную подзадачу, который можно многократно вызывать из различных мест программы по его имени.
Главный принцип инженерии программного обеспечения — DRY (Don't Repeat Yourself — «Не повторяйся»):
Вместо того чтобы копировать один и тот же 20-строчный алгоритм расчета в пяти разных местах проекта, его оформляют в виде функции и затем вызывают в одну короткую строчку.
Преимущества функций:
1. Модульность и структурированность программы;
2. Легкость поиска и исправления ошибок (исправление вносится в одном месте);
3. Возможность повторного использования кода в других проектах (библиотеки модулей).
DRY
def имяфункции()
Объявление функции начинается с ключевого слова def, за которым следует имя функции, круглые скобки со списком параметров и двоеточие. Тело функции пишется с отступом 4 пробела:
def calculatearea(width, height):
return area # Возврат вычисленного значения
Оператор return выполняет два действия:
1. Немедленно завершает работу функции;
2. Передает вычисленный результат обратно в точку вызова программы.
Если функция выполнилась до конца без оператора return, она автоматически возвращает специальное пустое значение None.
return
None
Разница print и return
print() просто выводит символы на экран монитора, а return возвращает значение в память, чтобы его можно было использовать в дальнейших формулах или сохранить в переменную: res = myfunc().
Различие между параметрами и аргументами:
• Параметры — переменные, указанные в круглых скобках при объявлении функции (def f(a, b):);
• Аргументы — конкретные фактические значения, которые передаются в функцию в момент ее вызова (f(10, 20)).
Виды передачи аргументов:
1. Позиционные аргументы — сопоставляются параметрам строго по порядку их следования слева направо;
2. Именованные (ключевые) аргументы — передаются с явным указанием имени параметра: calculatearea(height=5, width=10) (порядок можно менять);
3. Параметры со значениями по умолчанию — позволяют сделать аргумент необязательным:
def greet(name, greeting="Привет"):
return f"{greeting}, {name}!"
greet("Айжан") # «Привет, Айжан!»
greet("Джон", "Hello") # «Hello, Джон!»
Параметр по умолчанию
Переменные, созданные внутри функции, называются локальными (Local). Они существуют только во время работы функции и уничтожаются после выхода из нее. Попытка обратиться к локальной переменной снаружи функции вызовет ошибку NameError.
Переменные, созданные в основном тексте программы снаружи всех функций, называются глобальными (Global) — они видны и доступны для чтения в любом месте файла.
Порядок поиска переменных в Python (правило LEGB):
1. Local — поиск внутри текущей функции;
2. Enclosing — поиск в охватывающей внешней функции (при вложенных функциях);
3. Global — поиск среди глобальных переменных модуля;
4. Built-in — поиск во встроенных функциях языка (len, print, range).
Для изменения глобальной переменной изнутри функции требуется явное ключевое слово global x (хотя использование global считается плохим стилем программирования).
