Python: "foo() for i in range(bar)" 的意思是什么?

16

以下Python语句的确切含义是什么?

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

我知道randrange是一个随机数生成器,但实际上并不清楚该语句的影响。

2个回答

35
您发布的方式是一个SyntaxError
但我猜这个语句在[]里面。那么它就是一个列表推导式,它创建一个包含100个随机数的列表。它等同于以下代码:
whatever = []
for i in range(100):
    whatever.append(randrange(10**10))

如果代码在[]而不是()中,它将成为一个生成器表达式,即一个可迭代对象,其项目不会立即创建,而是按需创建。

25

仅仅这样使用将会导致语法错误。但如果用括号将其括起来,它就成为了一个生成器表达式

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

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

在方括号内是列表推导式

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

返回一个由randrange(10**10)调用产生的100个数字的列表。

与列表推导式相比,生成器表达式的优点在于它是惰性求值的,因此您不必构造和保留整个列表在内存中(这在使用非常大、可能是无限的生成器时尤其重要)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接