Python中yeild有什么作用?
0 732
0
该提问暂无详细描述
收藏
2021-01-17 20:37 更新 空心人 •  3378
共 1 个回答
高赞 时间
0

要了解其 yield 作用,必须了解什么是生成器。而且,了解生成器之前,必须了解 _iterables。 创建一个列表,自然是需要能一一阅读其中每个元素。逐一读取其项的过程被称为迭代:

mylist = [1, 2, 3] for i in mylist: ... print(i) 1 2 3

mylist 是一个_可迭代的_。当您使用 列表推导式 时,即是创建了一个列表,因此也是可迭代的:

mylist = [xx for x in range(3)] for i in mylist: ... print(i) 0 1 4 所有可以使用 for... in... 的数据结构都是可迭代的; lists , strings ,文件... 这些可迭代的方法很方便,因为您可以随意读取它们,但是您将所有值都存储在内存中,当拥有很多值时,这并不总是想要的 生成器:generator 生成器也是一种迭代器,一种特殊的迭代,特殊在只能迭代一次 。生成器不会将所有值存储在内存中,而是即时生成值 : mygenerator = (xx for x in range(3)) for i in mygenerator: ... print(i) 0 1 4 yield 关键字与 return 的使用方式一样,不同之处在于该函数将返回 生成器 def createGenerator(): ... mylist = range(3) ... for i in mylist: ... yield i*i ... mygenerator = createGenerator() # 创建一个 generator print(mygenerator) # mygenerator 是个对象! <generator object createGenerator at 0xb7555c34> for i in mygenerator: ... print(i) 0 1 4 掌握 yield ,需要清楚的一点是: 在调用函数时,在函数主体中编写的代码不会运行 ,该函数仅返回生成器对象,初学容易对这一点产生困惑。其次要明白,代码将在每次 for 使用生成器时从中断处继续。 第一次 for 调用从您的函数创建的生成器对象时,它将从头开始运行函数中的代码,直到命中为止 yield ,然后它将返回循环的第一个值。 然后,每个后续调用将运行您在函数中编写的循环的下一次迭代,并返回下一个值。这将一直持续到生成器被认为是空的为止,这在函数运行时没有命中时就会发生 yield 。那可能是因为循环已经结束,或者是因为您不再满足 "if/else" 。

收藏
2021-01-17 20:38 更新 小眼的铁板烧 •  3528