Can someone explain me why we need this “headache”…
对于您的特定示例,似乎没有任何仅限关键字的参数。相反,您尝试传递第一个、第二个和第四个参数的参数,而不必为您不关心的参数传递参数。在
换句话说,这一点也不头疼。这是一个方便(和健全性检查)你可以很容易忽视,但可能不想。在
而不是这样:PatternFill(‘FFFFFF’, ‘FFFFFF’, fill_type=’solid’)
…你可以写下:
^{pr2}$
…但是为了让知道您需要发送的内容,您需要阅读源代码或文档以查看整个参数列表,并查看要跳过的参数的默认值,然后显式地将它们添加到调用中。在
我怀疑有人会觉得更好。在
另外,正如许多人在评论中指出的,这几乎就是命名参数在C#中的工作方式。在
意外地,这个类是一个很好的例子,说明了为什么Python实际上允许只使用关键字的参数,尽管这里没有使用它们。在
事实上,您可以编写PatternFill(‘FFFFFF’, ‘FFFFFF’, ‘solid’)而不会因为PatternFill的错误参数而得到TypeError,而是一个关于{}不能作为颜色工作的神秘错误,这并不是一件好事。而且(至少在没有类型暗示注释的情况下,这种类型没有),您的IDE或任何其他工具都无法捕捉到这个错误。在
而且,事实上,如果不使用关键字,你甚至会在没有意识到的情况下,把初始参数弄错了。你几乎肯定想这么做:Patt