对于短列表,这并不重要,而且只需键入2个字符即可。但我认为str.join()
最常见的用例是以下情况:
''.join(process(x) for x in some_input)
result = []
for x in some_input:
result.append(process(x))
''.join(result)
如果使用可变参数而不是可迭代对象,那么这个语句将会被写成:
当输入数据条目数量很多时,您希望高效地生成输出字符串。
''.join(*(process(x) for x in some_input))
''.join(*result)
这会创建一个(可能很长的)元组,只是为了将其作为*args
传递。
所以在短的情况下,这是2个字符,而在大数据情况下浪费更多。
历史记录
函数定义中的*args
是很久以前就添加到Python中的:
==> 发布版本0.9.8(1993年1月9日) <==
需要(a)来容纳变量长度参数列表;现在有一个显式的“varargs”功能(在最后一个参数之前加上“*”)。需要(b)与旧类定义兼容:在发布版本0.9.4之前,具有多个参数的方法必须声明为“def meth(self,(arg1,arg2,...)):...”。
一种适当的将列表传递给此类函数的方法是使用内置函数
apply(callable, sequence)
。(请注意,这并未提及可以在
版本1.4文档中首次看到的
**kwargs
。)
使用
*
语法调用函数的能力首次出现在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
。
str_one + '.' + str_two
有什么问题吗?这样更少的字符更清晰! - Eric