对于简短的列表,这无关紧要,只需输入 2 个字符即可。但最常见的用例(我认为)str.join()
如下:
''.join(process(x) for x in some_input)
# or
result = []
for x in some_input:
result.append(process(x))
''.join(result)
其中 input_data 可以有数千个条目,您只想有效地生成输出字符串。
如果加入接受的变量参数而不是可迭代的,则必须拼写为:
''.join(*(process(x) for x in some_input))
# or
''.join(*result)
这将创建一个(可能很长)元组,只是将其作为*args
.
因此,在短情况下这是 2 个字符,而在大数据情况下是浪费的。
历史记录
(第二次编辑:基于历史文件,其中包含所有版本中缺少的版本。谢谢唐。)
*args
in 函数定义是很久以前在 Python 中添加的:
==> 0.9.8 版(1993 年 1 月 9 日)<==
需要案例 (a) 来容纳可变长度的参数列表;现在有一个明确的“可变参数”功能(在最后一个参数之前有一个'*')。为了与旧的类定义兼容,需要案例 (b):直到 0.9.4 版本,必须将具有多个参数的方法声明为 "def meth(self, (arg1, arg2, ...)): .. ."。
将列表传递给此类函数的正确方法是使用内置函数apply(callable, sequence)
。(注意,这并没有提到**kwargs
哪个可以在1.4 版本的文档中首先看到)。
*
在 1.6 的发行说明中首次提到了使用语法调用函数的能力:
现在可以使用特殊语法代替 apply() 函数。f(*args, **kwds) 等价于 apply(f, args, kwds)。您还可以使用变体 f(a1, a2, *args, **kwds),并且可以省略其中一个:f( args), f( *kwds)。
但是直到2.2 版的语法文档中都缺少它。
在 2.0 之前str.join()
甚至不存在,您必须这样做from string import join
。