以下语句在 Python 中究竟是什么意思?
randrange(10**10) for i in range(100)
我知道这randrange
是一个随机数生成器,但无法真正弄清楚该语句的效果。
以下语句在 Python 中究竟是什么意思?
randrange(10**10) for i in range(100)
我知道这randrange
是一个随机数生成器,但无法真正弄清楚该语句的效果。
你发布它的方式,它是一个SyntaxError
。
但我猜该声明在里面[]
。然后它是一个列表推导,它创建一个包含 100 个随机数的列表。它等效于以下代码:
whatever = []
for i in range(100):
whatever.append(randrange(10**10))
如果代码在里面()
而不是[]
它,那将是一个生成器表达式,即一个迭代,其项目不是立即创建而是按需创建。
就其本身而言,这将是一个语法错误。括在括号中,它是一个生成器表达式:
(randrange(10**10) for i in range(100))
返回一个生成器,该生成器将产生 100 次调用的结果randrange(10**10)
,一次调用一次。
在方括号内,它是一个列表理解:
[randrange(10**10) for i in range(100)]
返回一个由 100 个号码组成的列表,这些号码来自对randrange(10**10)
每个号码的调用。
生成器表达式优于列表推导式的优点是它的评估是惰性的,因此您不必构建整个列表并将其保存在内存中(这与非常大的、可能无限的生成器尤其相关)。