Задать вопрос
@Sushkov
">alert("yohoho")

Смысл упаковки ключевых аргументов в python 3?

Скажите зачем нужна упаковка ключевых аргументов, ведь непонятно какое имя аргумента может пользователь указать. Где или для чего такое используется?
  • Вопрос задан
  • 945 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@nirvimel
Да много где приходится использовать. Первое что вспоминается:
  1. Если одна функция является оберткой над другой функцией, реализация которой может меняться, то обертка принимает **kwargs и передает в оборачиваемую функцию, при этом может происходит изменение/добавление/удаление элементов словаря, т.е. параметров оборачиваемой функции.
  2. Написание декораторов - обобщение случая №1, когда оборачивается не конкретная функция, вызываемая по имени, а переменная.
  3. Часто используется в различных ORM, когда через параметры функции передаются значения полей модели/записи БД (сама ORM не имеет понятия о конкретной модели/таблице).
  4. Не уверен насчет того, насколько это правильный паттерн проектирования, но любую функцию принимающую словарь единственным аргументом можно переписать так, чтобы она принимала **kwargs, это дает возможность более удобной передачи аргументов f(var=42), вместо создания словаря на лету f({'var': 42}), и оставляет возможность передать готовый словарь через вызов с распаковкой аргументов f(**the_dict).
Ответ написан
angru
@angru
могут понадобиться когда у вас данные пришли снаружи, например из конфиг-файла.

import json

def foo(host, port):
    ....

with open('config.json', 'r') as f:
    config = json.loads(f.read())

    foo(config['host'], config['port'])  # можно так
    foo(**config)  # или так
Ответ написан
@Tirael78
Это нужно для реализации механизма полиморфизма.
Частные его случаи приведены выше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы