все 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Сообщить о неточности