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

标签 python wildcard args keyword-argument

因此,我试图了解下面 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/

相关文章:

Python Django REST 调用返回对象编号而不是对象名称

c - *.* 在 C 中的 argv[1] 中

wildcard - 符号链接(symbolic link)中带有通配符的 chmod

python - 使用带通配符的键创建 Python 字典

python - Pandas ,适用于作为数据框行条目的参数

java - 文件内容重定向到 args 不起作用

python - 如何在 Pandas 中调试 Cython 代码?

python - 在 Tornado 中处理 Redis 连接的正确方法是什么? (异步 - 发布/订阅)

python - 对应于 tf.nn.conv2d_transpose 的 Keras 层(函数)

java - args[] 用于文件读取