因此,我试图了解下面 lambda 示例中 * 的使用如何适合 *arg/**kwarg Python 习语。
如果我创建一个简单的求和函数,它使用 sum(iterable) 对数字列表求和,至少有几种方法可以做到这一点。
def summing(*x): return sum(*x)
或者我看到其他代码使用这个版本的 lambda
summing = lambda * x: sum(*x)
对于 lambda 版本,我不太明白 * 符号是如何融入成语的。我假设它不是一个 glob 模式——那它是什么?它在 Python 的其他地方使用吗? (或者像“*args”这样的空格不敏感?)
(这个问题以一小段 code 开头,这让我很困惑。)
最佳答案
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()
将一个可迭代对象作为第一个参数,第二个参数用于起始值。 sum(*x)
会向您抛出错误。
关于Python 习语 - *arg/**kwargs 中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252421/