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

Что такое значение по умолчанию в функции?

2.2 Middle🔥 181 комментариев
#Другое

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

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

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

Значение по умолчанию в функции

Значение по умолчанию (default value) — это значение, которое параметр функции получает автоматически, если вызывающий код не передал явный аргумент. Это мощный инструмент для упрощения сигнатур функций и повышения удобства их использования.

Синтаксис

Значение по умолчанию указывается в объявлении функции с использованием оператора =:

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

print(greet())  # Привет, гость!
print(greet("Иван"))  # Привет, Иван!

Параметры с значениями по умолчанию должны идти после параметров без значений по умолчанию:

# ✓ Правильно
def create_user(name, email, is_active=True, role="user"):
    pass

# ✗ Неправильно
def create_user(name="unknown", email):  # SyntaxError
    pass

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

def connect(host="localhost", port=5432, timeout=30):
    """Подключение к БД с параметрами по умолчанию"""
    return f"Connecting to {host}:{port} (timeout={timeout}s)"

print(connect())  # localhost, 5432, 30
print(connect("db.example.com"))  # db.example.com, 5432, 30
print(connect(port=3306))  # localhost, 3306, 30

def paginate(items, page=1, per_page=10):
    """Пример с обработкой данных"""
    start = (page - 1) * per_page
    end = start + per_page
    return items[start:end]

data = list(range(100))
print(paginate(data))  # Первая страница, 10 элементов
print(paginate(data, page=2, per_page=20))  # Вторая страница, 20 элементов

Важное предупреждение: изменяемые значения по умолчанию

Испольопасно использовать изменяемые объекты (list, dict, set) как значения по умолчанию. Значение создаётся один раз при определении функции и переиспользуется для всех вызовов:

# ✗ ОШИБКА: неправильное поведение
def add_item(item, items=[]):
    items.append(item)
    return items

result1 = add_item(1)  # [1]
result2 = add_item(2)  # [1, 2] — неожиданно!
result3 = add_item(3)  # [1, 2, 3] — список не очищается

print(result1)  # [1, 2, 3] — все результаты связаны!

Правильный способ:

# ✓ ПРАВИЛЬНО
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

result1 = add_item(1)  # [1]
result2 = add_item(2)  # [2]
result3 = add_item(3)  # [3]

Альтернатива с использованием immutable типов (кортежи, строки):

def process(data=()):
    """Пустой кортеж безопасен — он неизменяемый"""
    return list(data)

result1 = process((1, 2))  # [1, 2]
result2 = process()  # []

Различные типы параметров

# Позиционные параметры с значениями
def func(a, b=10, c=20):
    return a + b + c

func(1)  # 31 (b=10, c=20)
func(1, 2)  # 23 (b=2, c=20)
func(1, 2, 3)  # 6 (все переданы)

# Именованные параметры (kwargs)
def config(env="dev", debug=False, log_level="INFO"):
    return {"env": env, "debug": debug, "log_level": log_level}

config()  # {"env": "dev", "debug": False, ...}
config(env="prod", debug=True)  # переопределяем нужные параметры

# *args и **kwargs
def flexible(a, b=5, *args, **kwargs):
    print(f"a={a}, b={b}")
    print(f"args={args}")
    print(f"kwargs={kwargs}")

flexible(1, 2, 3, 4, name="test", debug=True)

Лучшие практики

  1. Используй значения по умолчанию для опциональных параметров — делает API функции понятнее
  2. Избегай изменяемых типов — всегда None вместо [] или {}
  3. Документируй значения по умолчанию в docstring:
    def fetch(url, timeout=5, retries=3):
        """Получить данные с URL
        
        Args:
            url: адрес для запроса
            timeout: таймаут в секундах (по умолчанию 5)
            retries: количество повторных попыток (по умолчанию 3)
        """
        pass
    
  4. Помни о порядке параметров — сначала обязательные, затем с значениями
  5. Используй именованные аргументы при вызове для ясности: func(a=1, b=2) вместо func(1, 2)

Значения по умолчанию — это фундаментальный инструмент Python, который делает код более читаемым и гибким. Главное — понимать их особенности и избегать типичных ошибок с изменяемыми типами.

Что такое значение по умолчанию в функции? | PrepBro