Python Glossary English

все Python 3Функциипонятие

Параметры по умолчанию

параметры

Параметры могут иметь значение по умолчанию. Изменяемые объекты как default — ловушка! Используй None-паттерн.

Синтаксис

def f(x, y=10): ...

Значение по умолчанию вычисляется один раз — в момент определения функции, а не при каждом вызове. Поэтому один и тот же список или словарь живёт между вызовами и копит изменения; паттерн с None (y=None, внутри if y is None: y = []) создаёт свежий объект при каждом вызове.

Примеры

def greet(name='World'):
    return f'Hello, {name}!'
print(greet())  # → Hello, World!
print(greet('Alice'))  # → Hello, Alice!
# Ловушка: изменяемый default
def bad(lst=[]):
    lst.append(1)
    return lst
print(bad())  # → [1]
print(bad())  # → [1, 1] — тот же список!
# None-паттерн (правильно)
def good(lst=None):
    if lst is None:
        lst = []
    lst.append(1)
    return lst
print(good())  # → [1]
print(good())  # → [1]
def connect(host='localhost', port=5432):
    return f'{host}:{port}'
print(connect())  # → localhost:5432
print(connect(port=3306))  # → localhost:3306

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности