Python:“范围(条形图)中的”foo()是什么意思?

时间:2012-05-09 09:03:10

标签: python

以下语句究竟在Python中意味着什么?

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

我知道randrange是一个随机数生成器,但不能真正证明该语句的效果。

2 个答案:

答案 0 :(得分:34)

你发布它的方式,它是SyntaxError 但我想这句话是在[]内。然后它是list comprehension,它创建一个包含100个随机数的列表。它相当于这段代码:

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

如果代码位于()而不是[]内,那么它将是generator expression,即一个可迭代的,其项目不是立即创建的,而是按需创建的。

答案 1 :(得分:25)

就其本身而言,这将是一个语法错误。括在括号中,它是generator expression

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

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

在方括号内,它是list comprehension

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

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

生成器表达式优于列表解析的优点是它被懒惰地评估,因此您不必构造并将整个列表保留在内存中(这对于非常大的,可能是无限的生成器尤其重要)。