Python 3洞察力

时间:2018-08-09 19:05:15

标签: python methods arguments kwargs

多年来,这一直是混乱和沮丧的根源。假设您导入了一个文档特别少的模块,并且您需要的某些方法的参数仅带有** kwargs,那么您应该如何知道该方法正在检查的键?

def test(**kwargs):
    if 'greeting' in kwargs:
        print(kwargs['greeting'])

如果我要打电话给文本,我怎么会知道“打招呼是该方法所追求的?”

test(greeting='hi)

IDE可以提供帮助的一些简单案例,但是大多数用例似乎超出了IDE的范围

4 个答案:

答案 0 :(得分:1)

kwargs视为字典。无法从外部判断该方法将接受哪些键值组合(在您的情况下,test方法实际上是一个黑匣子),但这是准备文档的关键。没有kwargs,某些函数头将变得非常混乱。

答案 1 :(得分:0)

使用文档!

subprocess-module's docs是一个很好的例子。如果您使用的是较新版本的python(带有backport的3.7或3.6),请在适合您的用例的情况下考虑使用dataclasses替代kwargs

答案 2 :(得分:0)

如果没有记录,唯一的办法就是阅读源代码。

答案 3 :(得分:0)

当您不想显式定义必须命名的参数时,可以使用在函数中添加**kwargs参数。

一个简单的例子:

如果一个函数将另一个不确定的函数作为参数,并且每次可能具有不同的kwargs

def foo(func,**kwargs): print(func) return func(**kwargs)

您将不知道该函数正在寻找什么。

您可以在示例中使用

def foo(greeting=None):

该函数正在寻找greeting,但可以是None