📝 Программирование

Функции: Лучшие практики

P
Автор
PyLand Team
📅
Опубликовано
03.04.2026
⏱️
Время чтения
2 мин
👁️
Просмотров
411
🌿
Уровень
Средний

Цель: Писать функции, которые легко читать, тестировать и использовать повторно.


Правило 1: Название = действие

Имя функции — глагол плюс объект. Если приходится читать тело, чтобы понять смысл — название плохое.

# Плохо
def f(x, y): ...
def process(): ...

# Хорошо
def calculate_total_price(base_price, quantity, tax_rate): ...
def validate_email(email): ...

Булевы функции начинают с is_, has_, can_:

def is_adult(age): return age >= 18
def has_permission(user): return user.role == "admin"
def can_withdraw(balance, amount): return balance >= amount

Правило 2: Одна задача (SRP)

# Плохо: одна функция делает всё
def process_user(name, age):
    if age < 18: return False
    with open("users.txt", "a") as f: f.write(f"{name},{age}\n")
    send_email(name)
    save_to_db(name, age)
    return True

# Хорошо: каждая функция — одно дело
def is_adult(age): return age >= 18
def save_user_to_file(name, age): ...
def send_welcome_email(name): ...

def register_user(name, age):
    """Зарегистрировать нового пользователя."""
    if not is_adult(age): return False
    save_user_to_file(name, age)
    send_welcome_email(name)
    return True

Правило 3: Возвращать результат, не печатать

Чистая функция возвращает значение и не меняет внешнее состояние.

# Плохо: смешаны вычисление и вывод
def calculate_discount(price, pct):
    result = price * (1 - pct / 100)
    print(f"Итого: {result}")
    return result

# Хорошо: логика отделена от отображения
def calculate_discount(price, discount_percent):
    """Вычислить цену со скидкой."""
    return price * (1 - discount_percent / 100)

def show_discount_info(price, discount_percent):
    final = calculate_discount(price, discount_percent)
    print(f"Цена: {price} руб. → {final} руб.")

Правило 4: Понятные параметры

# Плохо
def f(x, y, z): return x + y * z

# Хорошо — именованные аргументы при вызове
def calculate_total_price(base_price, quantity, tax_rate):
    """Вычислить общую стоимость с налогом."""
    return base_price + quantity * tax_rate

result = calculate_total_price(base_price=10, quantity=5, tax_rate=2)

Более 3–4 параметров — используй словарь или dataclass.


Правило 5: Не изменять аргументы

# Плохо: меняет переданный список
def add_item(items, new_item):
    items.append(new_item)  # побочный эффект!

# Хорошо: возвращает новый список
def add_item(items, new_item):
    """Вернуть новый список с добавленным элементом."""
    return items + [new_item]

Правило 6: Значения по умолчанию

def create_account(name, balance=0, currency="RUB"):
    """Создать банковский счёт."""
    return {"name": name, "balance": balance, "currency": currency}

account1 = create_account("Алиса")
account2 = create_account("Боб", 1000)
account3 = create_account("Чарли", 500, "USD")

Правило 7: Документируй функции

# Плохо
def calc(p, d): return p - (p * d / 100)

# Хорошо
def calculate_discounted_price(price, discount_percent):
    """
    Вычислить цену со скидкой.

    Args:
        price: Начальная цена товара
        discount_percent: Процент скидки (0-100)

    Returns:
        Цена после применения скидки

    Example:
        >>> calculate_discounted_price(1000, 20)
        800.0
    """
    return price * (1 - discount_percent / 100)

Правило 8: Короткие функции

Функция должна помещаться на один экран (20–30 строк). Если длиннее — разбей на части.

def process_order(order_id):
    """Обработать заказ полностью."""
    order = validate_order(order_id)
    if not check_inventory(order): return False
    save_order_to_database(order)
    send_confirmation_email(order)
    return True

Чек-лист хорошей функции

  • Название говорит, ЧТО делает (глагол + объект)
  • Одна задача (SRP)
  • Возвращает результат, не печатает
  • Понятные имена параметров
  • Не изменяет аргументы
  • Есть docstring
  • Длина до 20–30 строк
  • Максимум 3–4 параметра

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

DRY: Не повторяй себя 🔄

Представь: ты пишешь код для взлома 10 систем. Копируешь функцию hacksystem() 10 раз. Потом находишь...

📅 03.04.2026 👁️ 403
📝

Чистый код и полезные комментарии 🧹

Представь рабочий стол после большого проекта: инструменты нужны, а пустые коробки и старые черновики уже...

📅 03.04.2026 👁️ 390
📝

KISS: Пиши просто, пиши ясно 🎯

Твой код работает? Отлично! Но есть еще один важный критерий — читаемость. Код пишется один...

📅 03.04.2026 👁️ 372