Python 习惯用法 - *arg/**kwargs 中的空白

2 投票
1 回答
577 浏览
提问于 2025-04-18 03:58

我正在尝试理解下面这个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) 会给你报错。

撰写回答