使用* args和** kwargs [复制]
这个问题在这里已有答案:
**(双星/星号)和*(星号/星号)对参数有什么作用?
18个答案
没有找到相关结果
已邀请:
11 个回复
糕泰灌
和
。名称
和
仅按惯例,但没有硬性要求使用它们。 当你不确定可以向你的函数传递多少个参数时,你会使用
,即它允许你向你的函数传递任意数量的参数。例如:
类似地,
允许您处理未事先定义的命名参数:
您也可以将这些与命名参数一起使用。显式参数首先获取值,然后将其他所有内容传递给
和
。命名参数在列表中排在第一位。例如:
您也可以在同一个函数定义中使用它们,但是
必须在
之前出现。 调用函数时,也可以使用
和
语法。例如:
正如您在本案中所看到的,它会获取项目的列表(或元组)并将其解包。通过这个它将它们与函数中的参数匹配。当然,在函数定义和函数调用中都可以有
。
邵酮
和
非常有用的一个地方是子类化。
这样你就可以扩展Foo类的行为,而不必过多地了解Foo。如果您正在编程可能会更改的API,这可能非常方便。 MyFoo只是将所有参数传递给Foo类。
僻朵庙惩竣
拭十年
语法的地方之一,如Dave Webb的最后一个例子:
与仅使用名称本身相比,我不确定它是否非常快,但输入起来要容易得多!
森含械
浅镁
并使用它:sumFunction(3,4,6,3,6,8,9)。 ** kwargs具有不同的功能。使用** kwargs,您可以为函数提供任意关键字参数,并且可以作为dictonary访问它们。
调用someFunction(text =“foo”)将打印foo。
芦歉竭皑
然后你使用这个函数,如:
敦肌
和
或
纯粹按惯例。它使我们更容易阅读彼此的代码 一个方便的地方是使用struct模块
返回一个元组,而
使用可变数量的参数。在操作数据时,能够将元组传递给
是很方便的。
如果没有这种能力,你将被迫写作
这也意味着如果format_str改变并且元组的大小发生变化,我将不得不返回并编辑那个很长的行
樊熄忙暖
不幸的是它没有编译(语法错误)。 这编译:
但是将参数打印为元组,这不是我们想要的。 这是我解决的解决方案:
拟僚疽刊剔
但由于这些参数隐藏了实际的参数名称,因此最好避免使用它们。
芦歉竭皑