其他回答者的正确回答是您发现了一个生成器表达式(其表达与列表推导类似,但没有方括号)。
通常,genexps(众所周知)与列表推导相比,具有更高的存储效率和速度。
但是,在''.join()
列表推导的情况下,它更快且内存使用效率更高。原因是联接需要对数据进行两次传递,因此它实际上需要一个真实的列表。如果您给它一个,它可以立即开始工作。如果改为给它一个genexp,它将无法开始工作,直到它通过运行genexp到穷竭在内存中建立一个新列表:
~ $ python -m timeit '"".join(str(n) for n in xrange(1000))'
1000 loops, best of 3: 335 usec per loop
~ $ python -m timeit '"".join([str(n) for n in xrange(1000)])'
1000 loops, best of 3: 288 usec per loop
比较itertools.imap和map时,结果相同:
~ $ python -m timeit -s'from itertools import imap' '"".join(imap(str, xrange(1000)))'
1000 loops, best of 3: 220 usec per loop
~ $ python -m timeit '"".join(map(str, xrange(1000)))'
1000 loops, best of 3: 212 usec per loop
join
很可能是用C编写的,因此比列表理解要快得多……测试时间!