← Все вопросы
Чем отличаются именованные и позиционные аргументы при вызове функции?
14
Можно вызвать функцию двумя способами: f(1, 2) или f(x=1, y=2). В чём разница, что лучше и можно ли их смешивать?
3 ответа
23
✓ Принятый ответ — помог автору
Разница в том, как Python сопоставляет переданное значение с параметром:
- Позиционные — по порядку. Первый аргумент идёт в первый параметр, второй во второй и т.д.
- Именованные (keyword) — по имени, явно:
имя=значение. Порядок при этом неважен.
def rect(width, height):
return width * height
rect(3, 4) # позиционно
rect(width=3, height=4) # именованно
rect(height=4, width=3) # именованно, порядок другой — тот же результат
Смешивать можно, но правило: сначала позиционные, потом именованные. rect(3, height=4) — ок, а rect(width=3, 4) — SyntaxError.
Именованные удобны, когда аргументов много и из вызова непонятно, что есть что: create_user('Аня', True, False) читается хуже, чем create_user(name='Аня', is_admin=True, active=False).
Дарья Морозова про читаемость — прям в точку, у меня вечно булевые флаги непонятные · 18 месяцев назад
9
Позиционные — по порядку, именованные — по имени key=value. Сначала идут позиционные, потом именованные.
3
По порядку vs по имени.
Ваш ответ
Войдите, чтобы ответить на вопрос.