← Назад к вопросам
В чём разница между процедурой и функцией?
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)
Чистота кода: почему это важно
В функциональном программировании стараются:
- Функции — чистые: одни и те же входы → одни и те же выходы
- Процедуры — явно обозначать побочный эффект
# Плохо: функция с побочными эффектами
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() и результат не используется — это логически процедура
Практическое значение: при код-ревью правильное разделение улучшает читаемость и тестируемость.