是可以接受的Python“ kwargs”用法吗?

时间:2018-12-06 14:13:36

标签: python kwargs

所以我对Python还是比较陌生,我很难理解kwarg,这似乎是一个简单的概念,但我在网上看到的每个用法似乎都不同。我使用的对吗?

我有一个函数plot_performance(),该函数创建一个简单的散点图,并具有可选的关键字“保存”,如果将其设置为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 个答案:

答案 0 :(得分:1)

如果您知道或希望通过save,请直接指定。您可能会记住一个默认值,所以正如Bernhard在评论中提到的那样:

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]