Это допустимое использование Python ''kwargs"?

Так что я относительно новичок в Python, и мне тяжело разобраться с kwargs, это кажется достаточно простой концепцией, но каждое его использование, которое я вижу в Интернете, кажется другим. Я правильно это использую?

У меня есть функция plot_performance(), которая создает простой точечный график и имеет необязательное ключевое слово "save", которое при значении True должно сохранять график в формате PNG.

def plot_performance(list_in, **kwargs):

    '''

    '''

    for key in kwargs:
        if (key == 'save') and (kwargs[key] is True):
            plt.savefig('plot.png', bbox_inches='tight')

Впервые отправляю вопрос, так что простите, если мой вопрос слишком общий или мое форматирование выключено, спасибо!

1 ответ

Если вы знаете или ожидаете save чтобы быть переданным, укажите это напрямую. Вы, вероятно, имеете в виду значение по умолчанию, так как Бернхард упоминает в комментарии:

def plot_performance(list_in, save=False):
    if save:
        put.save_fig(...)

Если вы использовали kwargs, используйте его get метод.

def plot_performance(list_in, **kwargs):
    save = kwargs.get('save', False)
    if save:
        ...

Тем не мение, kwargs обычно используется, когда вам нужно принять произвольные аргументы ключевых слов, которые вы не обязательно знаете или не заботитесь о них, чтобы передать их другой функции. Пример, включающий переопределенный метод:

class Child(Base):
    def foo(self, x, **kwargs):
        # do something with x
        # Pass any other keyword args on to another class's definition
        # of foo.
        super().foo(**kwargs)

В более редких случаях его можно использовать для принятия произвольных аргументов ключевых слов без предварительного их определения:

class Namespace:
    def __init__(self, **kwargs):
        self.values = dict()
        for kw in kwargs:
            self.values[kw] = kwargs[kw]
Другие вопросы по тегам