16

以下语句在 Python 中究竟是什么意思?

randrange(10**10) for i in range(100)

我知道这randrange是一个随机数生成器,但无法真正弄清楚该语句的效果。

4

2 回答 2

35

你发布它的方式,它是一个SyntaxError
但我猜该声明在里面[]。然后它是一个列表推导,它创建一个包含 100 个随机数的列表。它等效于以下代码:

whatever = []
for i in range(100):
    whatever.append(randrange(10**10))

如果代码在里面()而不是[]它,那将是一个生成器表达式,即一个迭代,其项目不是立即创建而是按需创建。

于 2012-05-09T09:05:57.277 回答
25

就其本身而言,这将是一个语法错误。括在括号中,它是一个生成器表达式

(randrange(10**10) for i in range(100))

返回一个生成器,该生成器将产生 100 次调用的结果randrange(10**10),一次调用一次。

在方括号内,它是一个列表理解

[randrange(10**10) for i in range(100)]

返回一个由 100 个号码组成的列表,这些号码来自对randrange(10**10)每个号码的调用。

生成器表达式优于列表推导式的优点是它的评估是惰性的,因此您不必构建整个列表并将其保存在内存中(这与非常大的、可能无限的生成器尤其相关)。

于 2012-05-09T09:06:14.460 回答