← Назад к вопросам

В чём разница между процедурой и функцией?

1.0 Junior🔥 161 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между процедурой и функцией

Это фундаментальное различие в программировании, хотя в Python граница между ними размыта. Разберу детально.

Функция (Function)

Функция — это именованный блок кода, который:

  • Принимает входные параметры (опционально)
  • Выполняет вычисления
  • Возвращает значение (обязательно)
  • Имеет побочный эффект (опционально)
# Пример функции
def calculate_sum(a, b):
    result = a + b
    return result

sum_result = calculate_sum(5, 3)
print(sum_result)

def log_and_sum(a, b):
    print(f"Вычисляю сумму {a} + {b}")
    return a + b

Ключевая характеристика функции: она возвращает значение, которое можно использовать в выражениях.

Процедура (Procedure)

Процедура — это именованный блок кода, который:

  • Принимает входные параметры (опционально)
  • Выполняет действия (часто с побочными эффектами)
  • НЕ возвращает значение (или возвращает None)
  • Используется ради её побочных эффектов
# Пример процедуры
def print_welcome(name):
    print(f"Добро пожаловать, {name}!")

result = print_welcome("Alice")
print(result)

def save_to_database(user_data):
    db.insert('users', user_data)

Таблица сравнения

АспектФункцияПроцедура
Возвращаемое значениеОбязательно возвращает значениеНе возвращает (None)
ЦельВычисления, трансформацияВыполнение действий
Побочные эффектыМинимальныОсновная цель
Использование результатаРезультат используетсяРезультат игнорируется
Примерabs(x), len(list)print(), save_to_db()

Практические примеры в Python

# ===== ФУНКЦИИ =====

def get_user_age(birth_year):
    from datetime import datetime
    current_year = datetime.now().year
    return current_year - birth_year

age = get_user_age(1990)
if age > 18:
    print("Совершеннолетний")


def filter_active_users(users):
    return [u for u in users if u['is_active']]

active = filter_active_users(all_users)


# ===== ПРОЦЕДУРЫ =====

def initialize_logger():
    import logging
    logging.basicConfig(level=logging.INFO)

initialize_logger()


def send_notification(user_id, message):
    user = db.get_user(user_id)
    email_service.send(user.email, message)

send_notification(123, "Привет!")


def delete_old_files(directory, days=30):
    import os
    from datetime import datetime, timedelta
    
    cutoff = datetime.now() - timedelta(days=days)
    for filename in os.listdir(directory):
        filepath = os.path.join(directory, filename)
        if os.path.getmtime(filepath) < cutoff.timestamp():
            os.remove(filepath)

Чистота кода: почему это важно

В функциональном программировании стараются:

  1. Функциичистые: одни и те же входы → одни и те же выходы
  2. Процедуры — явно обозначать побочный эффект
# Плохо: функция с побочными эффектами
def calculate_and_log(a, b):
    result = a + b
    print(result)
    return result

# Хорошо: отделяем функцию от процедуры
def calculate(a, b):
    return a + b

def process_calculation(a, b):
    result = calculate(a, b)
    print(result)

В контексте Python

В Python нет формального различия между процедурами и функциями — все это def. Но:

  • Если функция вызывается как result = func() — это логически функция
  • Если вызывается просто func() и результат не используется — это логически процедура

Практическое значение: при код-ревью правильное разделение улучшает читаемость и тестируемость.

В чём разница между процедурой и функцией? | PrepBro