在 Python 中,列表推导式是创建列表的强大工具。然而,Python 语言还引入了另一个类似的功能,称为生成器表达式。
生成器表达式与列表推导式不同,因为它们不使用方括号 ([])。相反,它们使用括号 (),一次生成一个值。这一特性使它们比列表推导式更节省内存,因为它们会动态生成值,而无需在内存中创建完整的列表。
在提供的示例中,xrange(10) 中 _ 的 str(_) 为生成表示 0 到 9 数字的字符串序列的生成器表达式。将此生成器表达式传递给 join 具有与使用列表理解相同的效果,但不需要 square
但是,需要注意的是,并非所有函数都可以接受生成器表达式。需要完整列表的函数,例如 sort 或 len,将需要显式列表。
内存效率和性能
一般来说,生成器表达式更占内存 -比列表理解高效。然而,在连接的情况下,使用列表理解既更快又更节省内存。这是因为 join 需要对数据进行两次传递,并且拥有一个真实的列表可以让它立即开始工作。
在这种情况下,列表推导式相对于生成器表达式的性能优势由以下 Python timeit 说明基准测试:
>>> timeit ''.join(str(n) for n in xrange(1000)) 1000 loops, best of 3: 335 usec per loop >>> timeit ''.join([str(n) for n in xrange(1000)]) 1000 loops, best of 3: 288 usec per loop
因此,虽然生成器表达式在许多情况下提供内存效率优势,但在做出选择时考虑所使用函数的具体性能特征非常重要列表推导式和生成器表达式之间。
以上是列表推导式与生成器表达式:何时应该在 Python 中使用括号而不是方括号?的详细内容。更多信息请关注PHP中文网其他相关文章!