python中yield的用法

yield(生成器)

v.
产生(收益、效益等),产生(结果);出产(天然产品,农产品,工业产品);屈服,让步;放弃,让出;给(大路上的车辆)让路;(受压)活动,弯曲,折断;<正式>被……替代;请(某人)讲话;停止争论

n.
产量;收益,利润,红利(或股息)率

翻译下:
就是代码运行一段时间之后产生了一些东西。
yield的函数则返回一个可迭代的 generator(生成器)对象。可以使用for循环,或者调用next()方法遍历生成器对象来提取结果。

class test():
	def __init__(self, data=1):
		self.data = data
	def __next__(self):		
		if self.data > 5:
			raise StopIteration
		else:
			self.data += 1
			return self.data
t = test(3)
for i in range(3):
	print(t.__next__())
class Fibs:
	def __init__(self):
		self.a = 0
		self.b = 1
	def __next__(self):
		self.a, self.b = self.b, self.a + self.b
		return self, self.a, self.b
	def __iter__(self):
		print("A")
		return self

fibs = Fibs()
print(fibs)
print("*************")
print(fibs.__iter__())

上面讲的是迭代器:
下面说生成器:
生成器是一种特殊的迭代器。当调用fib()函数时,生成器实例化并返回,这时并不会执行任何代码,生成器处于空闲状态,注意这里prev, curr = 0, 1并未执行。然后这个生成器被包含在list()中,list会根据传进来的参数生成一个列表,所以它对fib()对象(一切皆对象,函数也是对象)调用__next__方法。

def fib(end = 1000):
    prev,curr=0,1
    while curr < end:
        yield curr     #这个yield,每次执行就会返回,并不会使程序结束
        prev,curr=curr,curr+prev

#print(list(fib()))
   #这个yield,每次执行就会返回,并不会使程序结束,并将结果放在管道中,
   每执行一次就会返回一个当前的yield的值,如果执行结束。
a = fib()
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
#####
1
1
2
3

相关推荐

  1. pythonyield

    2024-01-30 19:20:02       41 阅读
  2. Pythonyield

    2024-01-30 19:20:02       12 阅读
  3. 深入理解Python `yield` 和 `yield from`

    2024-01-30 19:20:02       30 阅读
  4. Unity - yield return相关

    2024-01-30 19:20:02       35 阅读
  5. Pythonpythonisinstance

    2024-01-30 19:20:02       14 阅读
  6. PythonPython@wraps

    2024-01-30 19:20:02       11 阅读
  7. pythonyield是什么?

    2024-01-30 19:20:02       16 阅读
  8. Python常见

    2024-01-30 19:20:02       39 阅读
  9. pythonprint函数

    2024-01-30 19:20:02       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 19:20:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 19:20:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 19:20:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 19:20:02       20 阅读

热门阅读

  1. 龙哥风向标 20230321~20230328 GPT拆解

    2024-01-30 19:20:02       29 阅读
  2. 并励直流电动机仿真设计

    2024-01-30 19:20:02       37 阅读
  3. Vue.js中<input ref=“input“>

    2024-01-30 19:20:02       23 阅读
  4. chatgpt搭建

    2024-01-30 19:20:02       31 阅读
  5. fMRI数据处理(随时更新)

    2024-01-30 19:20:02       30 阅读