版权声明:借鉴时注明出处就行 https://blog.csdn.net/weixin_42144379/article/details/85332668
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,
返回 yield 的值 (有 return 作用), 并在下一次执行 next() 方法 时从当前位置继续运行。
(ps: 使用了 yield就会自带next()方法)
调用一个生成器函数,返回的是一个迭代器对象。
案例1:
# -*- coding: utf-8 -*-
def test1():
var = 1
print(var)
yield var
print("test1:")
test1()
print("next():")
next(test1())
控制台打印:
test1:
next():
1
解释: 在调用 test1 方法时,并不会执行里面的 print(var) 在控制台打印 ,而是返回一个 生成器
只有 调用 test1() 返回的生成器 的 next 方法 如: next(test1()) 才会执行里面的代码
案例2:
# coding=utf-8
def test2():
var = 1
for i in [1,2,3]:
var += 1
yield var
print("我是yield 之后的:"+str(var))
for i in test2():
print(i)
控制台打印:
2
我是yield 之后的:2
3
我是yield 之后的:3
4
我是yield 之后的:4
解释: 使用 for 循环 会自动调用 test2() 返回的生成器中的 next 方法,从而进行遍历作用.
每次执行到 yield 返回 var 的值打印出来,保存当前的所有运行信息 ,
然后继续执行 打印 "我是yield 之后的:2"