以下语句究竟在Python中意味着什么?
randrange(10**10) for i in range(100)
我知道randrange
是一个随机数生成器,但不能真正证明该语句的效果。
答案 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个数字的列表。
生成器表达式优于列表解析的优点是它被懒惰地评估,因此您不必构造并将整个列表保留在内存中(这对于非常大的,可能是无限的生成器尤其重要)。