我曾经搭配一个智能的pythonista。每当他输入具有可选或关键字参数的函数定义时,他都会惊呼“ argh!”。和“夸!”。
否则,我们相处融洽,我想这是学术编程对人的影响。
现在,Args和Kwargs参数在Python中仍然非常有用,并且了解它们的力量将使您更有效地开发人员。
那么“ args”和“ kwargs”参数有什么作用?
它们允许函数接受可选参数,因此您可以在模块和类中创建弹性API。
示例代码如下:
以上功能至少需要一个称为“必要”参数,但它也可以接受其他位置参数和关键字参数。
如果我们调用具有其他参数的函数,则该参数将作为元组收集其他位置参数,因为此参数的名称具有*(单星)前缀。
同样,夸尔格(Kwargs)作为字典收集其他关键字参数,因为此参数名称具有**(双星)前缀。
如果没有将其他参数传递给函数。ARGS和KWARGS可以为空。
当我们调用与参数不同组合的函数时,您会看到args和kwargs内部的内部参数。
如何根据位置参数还是关键字参数收集它们。代码如下显示:
我想澄清一下,呼叫args和kwargs参数是一种简单的命名实践。
像上一个示例一样,如果他们被称为
Parms和argv也可用。实际上,语法是单星(
)或双星()。
但是,我仍然建议您仍然坚持可接受的命名练习以避免混乱。(并且有机会大喊“ Argh!”和“ Kwargh!”)。
##转发或关键字参数
可以通过一个函数传递到另一个函数,以传递可选或关键字参数。
当您调用函数转发参数时,您可以使用拆卸参数运算符
和
*。在您传递之前,这也将使您有机会修改参数。
示例如下:
该技术可用于子分类和编写包装功能。
例如,您可以使用它来扩展父类的行为,而无需复制子类中其构造函数函数的完整签名。
如果您使用的API可能会超出您的控制范围,这将非常方便。示例代码如下:
ElwaysBlueCar构造函数仅将所有参数传输到其父类,然后覆盖内部属性。
这意味着,如果父构建器更改,则始终可能仍会按预期运行。
这里的缺点是,ElwandBlueCar构造函数现在具有一个相当无用的签名 - 如果我们没有找到父类,我们不知道它需要什么参数。
通常,您不会将此技术用于自己的班级结构。更有可能修改或涵盖无法控制的外部类的行为。
但这始终是一个危险的区域,因此最好要小心(否则您很快可能会有另一个尖叫“ argh!”的理由)。
该技术可能有用的另一种情况是编写包装功能,例如装饰器。您通常希望接受任何要传递给包装功能的参数。
此外,如果我们可以这样做而无需复制和粘贴原始功能签名,则可能更容易维护:
使用这样的技术,有时很难在使代码变得足够清晰的想法之间取得平衡,并遵守这个想法,不要重复自己(干燥)原则。
这可能永远是一个困难的选择。如果您可以从同事那里获得第二意见,我鼓励您尝试一下。
以上是该共享的所有内容。如果您想了解更多信息,请转到公共帐户:Python编程学习圈,每日干货共享
原始:https://juejin.cn/post/7101134603032723470