Python 习惯用法 - *arg/**kwargs 中的空白
我正在尝试理解下面这个lambda示例中的*符号是如何与*arg/**kwarg这两个Python用法结合在一起的。
如果我创建一个简单的函数,叫做summing,它使用sum(iterable)来对一组数字进行求和,那么至少有几种方法可以做到这一点。
def summing(*x): return sum(*x)
或者我见过其他代码使用这个版本的lambda。
summing = lambda * x: sum(*x)
对于lambda版本,我不太明白*符号在这个用法中是怎么回事。我猜它不是用来做通配符的——那它是什么呢?在Python的其他地方也用到吗?(或者像“*args”这样的用法对空格不敏感吗?)
(这个问题开始于一小段代码,让我感到困惑。)
1 个回答
0
summing = lambda *x: sum(*x)
基本上和下面这个是一样的
def summing(*x): return sum(*x)
不过,你不应该使用上面这两段代码。*x
允许传入不定数量的参数,但只是为了给 sum()
解包。
如果你想像这样传递你的 summing()
函数参数:
summing(1,2,3,4)
... 使用以下代码:
def summing(*x): return sum(x)
如果你想传递一个序列的话...
summing([1,2,3,4])
... 使用这个:
def summing(x): return sum(x)
你的变体...
def summing(*x): return sum(*x)
... 需要传入一个序列(就像上面的函数,所以你不需要两次使用 *x
!),你不能直接给它 (1,2,3,4)
。sum()
的第一个参数是一个可迭代对象,第二个参数是起始值。sum(*x)
会给你报错。