这是否可以接受Python”kwargs’?

Is this acceptable use of Python ''kwargs"?

所以我对python比较陌生,而且我很难理解kwargs,这似乎是一个简单的概念,但是我在网上看到的它的每一种用法似乎都有所不同。我用得对吗?

我有一个函数plot_performance(),它创建了一个简单的散点图,并且有一个可选的关键字"save",如果设置为true,它将把图保存为png。

1
2
3
4
5
6
7
8
9
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')

第一次发布问题时,请原谅我的问题太笼统或格式设置已关闭,谢谢!


如果您知道或希望通过save,请直接指定。您可能有一个默认值,如Bernhard在评论中提到的:

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

如果您确实使用了kwargs,请使用它的get方法。

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

但是,当您需要接受您不一定知道或不关心的任意关键字参数,以便将它们传递给另一个函数时,通常使用kwargs。涉及重写方法的示例:

1
2
3
4
5
6
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)

更为罕见的是,它可以用来接受任意关键字参数,而不必提前定义它们:

1
2
3
4
5
class Namespace:
    def __init__(self, **kwargs):
        self.values = dict()
        for kw in kwargs:
            self.values[kw] = kwargs[kw]