Python method/function arguments starting with asterisk and dual asterisk
我无法理解这些类型的函数在哪里使用,以及这些参数与正常参数的工作方式有多不同。我见过他们很多次,但从来没有机会正确理解他们。
前任:
1 2 3 4
| def method(self, *links, **locks):
#some foo
#some bar
return |
我知道我可以搜索文档,但我不知道要搜索什么。
- 请参阅前面的问题:stackoverflow.com/questions/287085/…
- 同上——这里有一个链接会有所帮助:saltycrane.com/blog/2008/01/…
- "我知道我可以搜索文档,但我不知道要搜索什么。"学习时经常发生。就像是说"那东西里是什么?"一些所谓的"专家"忘记的是,有时候特瑞的最低理解水平需要知道如何去问一个问题。
- 您可能也有兴趣阅读其中一个问题**(双星)和*(星)对python参数做了什么?或者星号*在python中是什么意思?
- 真是个好问题!
*args和**keywordargs形式分别用于传递参数列表和参数字典。所以如果我有这样的功能:
1 2 3
| def printlist(*args):
for x in args:
print(x) |
我可以这样称呼它:
1
| printlist(1, 2, 3, 4, 5) # or as many more arguments as I'd like |
为此
1 2 3 4
| def printdict(**kwargs):
print(repr(kwargs))
printdict(john=10, jill=12, david=15) |
*args的行为类似于一个列表,**keywordargs的行为类似于一个字典,但您不必向函数显式传递list或dict。
请参阅此了解更多示例。
- 但是您可以显式地将列表或dict传递给函数吗?
- 是的,你可以。如果按原样传递,则列表将为args[0]。另一方面,如果用星号(不是函数定义中的星号,而是调用中的星号)调用函数,则传递的列表将是实际的args元组。
- *args是一个tuple,而不是一个list。
- >>>定义D(*args):…print(type(args))>>>d(1,2,3)