python中yield关键字

yield和return
理解一个东西最好的办法就是找一个和它类似的东西,然后再搞清楚它们之间的区别。
yield最类似的东西就是return,因为他们起到了同样的作用:返回值。
看这个return的函数:

def have_some_wine():
  print('先开一瓶酒,共有700毫升')
  wine = 700
  while wine > 0:
    # 取酒
    if wine > 200:
      get_wine = 200
      wine = wine - 200
    else:
      get_wine = wine
      wine = 0

    # 把酒送给客人
    print('您的酒来了:200毫升')
    return get_wine
    # yield get_wine


pa = have_some_wine()
print(pa)

在这里插入图片描述
但一旦遇到了return,函数执行就结束了。
下次再调用它,是一次全新的调用,和上一次调用是没有关系的。就算函数中存在多个return也是一样,当遇到第一个return函数也就停止了,
所以我们说它是无状态的。可以理解吧。
yield
假设这样一个场景:我们去酒吧,开了一瓶名贵的啤酒,价值2022元。一次性喝不完,可以保存在酒吧,下次再来喝。
用一个函数来模拟这个开酒的过程:

def have_some_wine():
  print('先开一瓶酒,共有700毫升')
  wine = 700
  while wine > 0:
    # 取酒
    if wine > 200:
      get_wine = 200
      wine = wine - 200
    else:
      get_wine = wine
      wine = 0

    # 把酒送给客人
    print('您的酒来了:200毫升')
    # return get_wine
    yield get_wine


pa = have_some_wine()
print(pa)
for i in pa:
    print(f'我今天喝了{i}')

python中yield关键字_第1张图片
注意这个函数的特点:
它没有return关键词,而是用了yield关键词
如果剩下的酒大于200毫升,就用yield关键词返回200毫升
如果剩下的酒小于200毫升,就一次性都返回,这样这个函数的生命周期就结束了。
这就是我说的使用yield的函数是有状态的函数,会记住上次运行的结果,再上次的基础上继续运行或者停止运行。
总结:
yield类似于return,在函数中返回值给调用者。
使用了yield的函数是有状态的函数,后面的调用会基于前面的调用状态继续执行

你可能感兴趣的:(python,android,开发语言)