← Все вопросы

Чем отличаются именованные и позиционные аргументы при вызове функции?

Задан 19 месяцев назад811 просмотров3 ответа
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 по имени.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект