不带方括号的 Python 列表理解
使用 Python 的“join”函数时,需要一个可迭代对象作为参数。通常,列表推导式括在方括号中,但也可以省略它们。这种看似矛盾的行为提出了一个问题:表达式“str(_) for _ in xrange(10)”会生成列表还是可迭代对象?
生成器表达式
解释在于 Python 的生成器表达式,它具有与列表推导式类似的表示法,但缺少方括号。生成器表达式根据需要一次生成一个元素,从而使它们具有内存效率和高性能。
在“join”示例中,“str(_) for _ in xrange(10)”是一个生成器表达式,它惰性地产生从 0 到 9 的数字的字符串表示形式。该生成器表达式是一个可迭代的,它满足“join”函数的要求。
性能注意事项
虽然生成器表达式通常比列表理解提供性能优势,但“连接”的情况并不总是如此。 “join”函数需要两次传递数据,因此,将整个列表存储在内存中会受益匪浅。因此,列表理解(“[str(_) for in xrange(10)]”)优于生成器表达式(“str(_) for in xrange(10)”)加入”上下文。基准测试证实了这种性能优势。
结论
理解生成器表达式对于优化 Python 代码至关重要。然而,在“连接”的特定情况下,传统的列表理解仍然是更有效的选择,因为该函数需要迭代整个列表两次。
以上是Python 中的 `str(_) for _ in xrange(10)` 是 List 还是 Iterable?的详细内容。更多信息请关注PHP中文网其他相关文章!