Добавить в корзинуПозвонить
Найти в Дзене

Функции в Python: понятнее, чем кажется

Коротко о главном Основные принципы работы функций Как объявить простую функцию def add(a, b):
return a + b
print(add(3, 5)) # 8 def greet():
return "Привет!"
print(greet()) # Привет! def greet(name="мир"):
return f"Привет, {name}!"
print(greet()) # Привет, мир!
print(greet("Катя")) # Привет, Катя! Аргументы: позиционные, именованные и по умолчанию def info(name, age):
return f"{name} — {age} лет"
print(info("Иван", 30)) # Иван — 30 лет
print(info(age=25, name="Мария")) # Мария — 25 лет def demo(*args, **kwargs):
return args, kwargs
print(demo(1, 2, 3, a=4, b=5)) # ((1, 2, 3), {'a': 4, 'b': 5}) Локальные и глобальные переменные x = 10
def show():
global x
x += 5
return x
print(show()) # 15
print(x) # 15 Совет: старайтесь избегать глобальных изменений внутри функций; лучше возвращать значение и вызывать в нужном месте. Докстринги и типизация def multiply(a: int, b: int) -> int:
"""Умножает два целых числа и во

Коротко о главном

  • Функции позволяют объединить код в именованный блок, который можно вызывать много раз с разными данными.
  • Гибкость: функции могут принимать аргументы, возвращать значения и иметь локальные переменные.
  • Встроенные функции и функции пользователя вместе образуют мощный инструмент для структурирования программы.

Основные принципы работы функций

  • Объявление функции: имя функции должно быть понятным и описывать, что делает код внутри.
    параметры в скобках — входные данные для функции.
    тело функции: отступы (обычно 4 пробела) и код, который выполняется.
  • Возврат значения: ключевое слово return завершает работу функции и возвращает значение.
    если return не используется, функция возвращает значение None.
  • Область видимости: переменные внутри функции локальные по умолчанию.
    можно использовать nonlocal и global в определённых случаях, но лучше держать код так, чтобы избегать таких зависимостей.

Как объявить простую функцию

  • Пример сложения двух чисел:

def add(a, b):
return a + b

print(add(3, 5)) # 8

  • Функция без аргументов:

def greet():
return "Привет!"

print(greet()) # Привет!

  • Значение по умолчанию для аргумента:

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

print(greet()) # Привет, мир!
print(greet("Катя")) # Привет, Катя!

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

  • Позиционные аргументы — передаются в порядке их определения.
  • Именованные (ключевые) аргументы — передаются с указанием имени параметра.

def info(name, age):
return f"{name} — {age} лет"

print(info("Иван", 30)) # Иван — 30 лет
print(info(age=25, name="Мария")) # Мария — 25 лет

  • Переменное число аргументов: позиционные: *args
    именованные: **kwargs

def demo(*args, **kwargs):
return args, kwargs

print(demo(1, 2, 3, a=4, b=5)) # ((1, 2, 3), {'a': 4, 'b': 5})

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

  • Локальные переменные существуют только внутри функции.
  • Глобальные переменные доступны во всей программе, если не переопределяются внутри функции.

x = 10

def show():
global x
x += 5
return x

print(show()) # 15
print(x) # 15

Совет: старайтесь избегать глобальных изменений внутри функций; лучше возвращать значение и вызывать в нужном месте.

Докстринги и типизация

  • Докстринг — полезное пояснение к функции:

def multiply(a: int, b: int) -> int:
"""Умножает два целых числа и возвращает результат."""
return a * b

  • Типизация помогает читаемости и инструментам анализа кода.

Анонимные функции (лямбда)

  • Простейшая форма небольших функций без имени:

square = lambda x: x * x
print(square(4)) # 16

  • Ограничения: лямбда — однострочная, не всегда читаема для сложной логики.

Замыкания

  • Функции внутри функций могут запоминать контекст:

def make_multiplier(n):
def multiplier(x):
return x * n
return multiplier

times3 = make_multiplier(3)
print(times3(5)) # 15

Читайте и применяйте модульность

  • Разделяйте логику на маленькие, повторно используемые функции.
  • Хорошая функция делает ровно одну вещь и делает её хорошо.
  • В проектах полезно группировать функции по модулям и файлам.

Примеры полезных функций в реальных задачах

  • Проверка числа на простоту:

def is_prime(n):
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True

  • Факториал через рекурсию:

def factorial(n):
if n < 0:
raise ValueError("n должно быть неотрицательным")
if n in (0, 1):
return 1
return n * factorial(n - 1)

  • Функция-генератор для последовательности Фибоначчи:

def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b

# Пример использования: взять первые 5 значений
gen = fibonacci()
for _ in range(5):
print(next(gen))

Когда стоит выносить логику в функции

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

Как тестировать функции

  • Простые тесты через assert:

def add(a, b):
return a + b

assert add(2, 3) == 5
assert add(-1, 1) == 0

  • Модульные тесты с unittest или pytest дают структурированное покрытие и отчёты.