Функция - именованный блок кода, который можно вызывать много раз.
def создаёт функцию, pass временно оставляет обязательный блок пустым.
При вызове функции позиционные аргументы сопоставляются по порядку, именованные - по названию параметра.
Аргументы по умолчанию пишутся после обязательных параметров.
*args собирает лишние позиционные аргументы в tuple, **kwargs - именованные аргументы в dict.
return завершает функцию и возвращает значение; без return результатом будет None.
LEGB описывает поиск имён: Local, Enclosing, Global, Built-in.
global нужен только для изменения глобальной переменной, но чаще лучше передавать данные параметрами.
Топ-3 ошибки: передавать не то количество аргументов; ожидать значение от функции, где нет return; менять global там, где достаточно параметров и return.
Скобки при передаче функции
Передать func() вместо func означает передать результат вызова, а не функцию.
Если нужно передать саму функцию, пишите имя без скобок.
def square(x):
return x * x
def apply(func, value):
return func(value)
print(apply(square, 5))
Неверный порядок default-аргументов
Параметр со значением по умолчанию не может стоять перед обязательным.
Сначала обязательные параметры, затем параметры со значениями по умолчанию.