Python`for`语法:块代码vs单行生成器表达式

我在块代码上下文中熟悉for循环.例如:

for c in "word":
    print c

我刚刚看到一些使用不同的例子.而不是从for语句开始,它们在表达式的末尾标记它(而不涉及缩进的代码块).例如:

sum(x*x for x in range(10))

任何人都可以指出一些概述这种用途的文档?我已经能够找到例子,但没有解释.我能够找到的所有文档描述了以前的使用(块代码示例).我甚至不知道该用什么,所以如果我的问题的标题不清楚,我很抱歉.

你所指向的是Python中的Generator.看一眼: –

> http://wiki.python.org/moin/Generators
> http://www.python.org/dev/peps/pep-0255/
> http://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features

请参阅文档: – Generator Expression,其中包含与您发布的完全相同的示例

从文档: –

Generators are a simple and powerful tool for creating iterators. They
are written like regular functions but use the yield statement
whenever they want to return data. Each time next() is called, the
generator resumes where it left-off (it remembers all the data values
and which statement was last executed)

发生器类似于List Comprehension,它使用方括号而不是括号,但它们的内存效率更高.他们不返回结果的完整列表在同一时间,但它们返回生成器对象.无论何时在生成器对象上调用next(),生成器使用yield返回下一个值.

列表对上述代码的理解如下所示:

[x * x for x in range(10)]

您还可以添加条件以过滤掉结果的结果.

[x * x for x in range(10) if x % 2 != 0]

如果数字不能被2整除,则它将返回1到5之间乘以2的数字列表.

描述使用收益的发电机的一个例子可以是:

def city_generator():
    yield("Konstanz")
    yield("Zurich")
    yield("Schaffhausen")
    yield("Stuttgart")

>>> x = city_generator()
>>> x.next()
Konstanz
>>> x.next()
Zurich
>>> x.next()
Schaffhausen
>>> x.next()
Stuttgart
>>> x.next()
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
StopIteration

所以,你看到,每次调用next()执行下一个yield()在生成器中.最后它会抛出StopIteration.

http://stackoverflow.com/questions/12920214/python-for-syntax-block-code-vs-single-line-generator-expressions

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Python`for`语法:块代码vs单行生成器表达式