所以我试图理解下面lambda示例中*的使用是如何符合*arg/**kwarg Python惯用语的。
如果我创建一个简单的函数,求和,使用sum( iterable )来对数字列表求和,至少有几种方法可以做到。
def summing(*x): return sum(*x)
或者我已经看过其他使用此版本的代码用于lambda
summing = lambda * x: sum(*x)
对于lambda版本,我真的不明白*符号如何适合这个成语。我假设它不是一个全局模式 - 那么它是什么?它在Python的其他地方使用过吗? (或者像“* args”这样的空格不敏感?)
(这个问题以code的一小段片段开始,让我难过。)
答案 0 :(得分:0)
summing = lambda *x: sum(*x)
与
基本相同def summing(*x): return sum(*x)
但首选功能,因为它们是more readable和faster。
但是,您不应该使用上述代码段中的任何一个。 *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)
会给你带来错误。