Python习语-*arg/**kwargs中的空白



因此,我试图理解以下lambda示例中*的使用如何符合*arg/**kwarg Python习惯用法。

如果我创建一个简单的函数suming,它使用sum(iterable)对一系列数字求和,那么至少有几种方法可以做到这一点

def summing(*x): return sum(*x)

或者我看到其他代码使用这个版本的lambda

summing = lambda * x: sum(*x)

对于lambda版本,我真的不明白*符号是如何适应这个习惯用法的。我假设它不应该是一个glob模式——那么它是什么呢?它在Python的其他地方使用过吗?(或者像"*args"这样的东西对空格不敏感?)

(这个问题从一小段让我困惑的代码开始。)

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)会向您抛出错误。

最新更新