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

see*_*ker 16 python

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

randrange(10**10) for i in range(100)
Run Code Online (Sandbox Code Playgroud)

我知道这randrange是一个随机数生成器,但不能真正弄清楚语句的效果.

Thi*_*ter 35

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

whatever = []
for i in range(100):
    whatever.append(randrange(10**10))
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*ker 25

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

(randrange(10**10) for i in range(100))
Run Code Online (Sandbox Code Playgroud)

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

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

[randrange(10**10) for i in range(100)]
Run Code Online (Sandbox Code Playgroud)

返回randrange(10**10)每个号码调用产生的100个号码列表.

发电机表达一个列表理解的优点是它懒洋洋地评估,所以你不必建造,并保持在内存中的整个列表(这是非常大的,可能是无限的发电机特别是有关).