多年来,这一直是混乱和沮丧的根源。假设您导入了一个文档特别少的模块,并且您需要的某些方法的参数仅带有** kwargs,那么您应该如何知道该方法正在检查的键?
def test(**kwargs):
if 'greeting' in kwargs:
print(kwargs['greeting'])
如果我要打电话给文本,我怎么会知道“打招呼是该方法所追求的?”
test(greeting='hi)
IDE可以提供帮助的一些简单案例,但是大多数用例似乎超出了IDE的范围
答案 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