gpt4 book ai didi

Python `for` 语法 : block code vs single line generator expressions

转载 作者:IT老高 更新时间:2023-10-28 22:18:54 27 4
gpt4 key购买 nike

我熟悉 block 代码上下文中的 for 循环。例如:

for c in "word":
print c

我刚刚遇到了一些以不同方式使用 for 的示例。他们不是从 for 语句开始,而是在表达式的末尾标记它(并且不涉及缩进的代码块)。例如:

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

谁能告诉我一些概述 for 用法的文档?我已经能够找到示例,但找不到解释。我能够找到的所有 for 文档都描述了以前的用法( block 代码示例)。我什至不知道如何称呼这种用途,所以如果我的问题标题不清楚,我深表歉意。

最佳答案

您所指的是 Python 中的 Generator。看看:-

查看文档:- 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 使用 方括号 而不是 brackets,但它们更节省内存。它们不会同时返回完整的 list 结果,而是返回生成器对象。每当您在 generator 对象上调用 next() 时,生成器都会使用 yield 来返回下一个值。

上述代码的

List Comprehension 如下所示:-

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

你还可以在for末尾添加条件过滤掉结果。

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

如果数字不能被 2 整除,这将返回 数字 乘以 1 到 5 范围内的 2 的列表。

描述 yield 使用的 Generators 示例可以是:-

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() 都会执行 generator 中的下一个 yield()。最后它抛出 StopIteration.

关于Python `for` 语法 : block code vs single line generator expressions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com