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

时间:2014-04-23 18:28:48

标签: python wildcard args kwargs

所以我试图理解下面lambda示例中*的使用是如何符合*arg/**kwarg Python惯用语的。

如果我创建一个简单的函数,求和,使用sum( iterable )来对数字列表求和,至少有几种方法可以做到。

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

或者我已经看过其他使用此版本的代码用于lambda

summing = lambda * x: sum(*x)

对于lambda版本,我真的不明白*符号如何适合这个成语。我假设它不是一个全局模式 - 那么它是什么?它在Python的其他地方使用过吗? (或者像“* args”这样的空格不敏感?)

(这个问题以code的一小段片段开始,让我难过。)

1 个答案:

答案 0 :(得分:0)

summing = lambda *x: sum(*x)

基本相同
def summing(*x): return sum(*x)

但首选功能,因为它们是more readablefaster

但是,您不应该使用上述代码段中的任何一个。 *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()将iterable作为第一个参数,第二个参数作为起始值。 sum(*x)会给你带来错误。