欢迎访问宙启技术站
智能推送

Python函数中的yield的作用和用法详解

发布时间:2023-06-17 20:50:57

在Python中,yield关键字用于定义生成器函数。生成器是一种特殊的迭代器,它在调用next()函数时挂起(暂停执行)函数并返回一个值,然后再在下一次调用next()函数时从当前位置继续执行,直到函数执行完毕或者碰到一个return语句。

下面是一个简单的使用yield的例子:

def my_generator():

    yield 1

    yield 2

    yield 3

for value in my_generator():

    print(value)

输出结果:

1

2

3

可以看到,在my_generator()函数中,我们使用yield关键字来返回值。每次调用next()函数时,函数会暂停执行并返回一个值。在这个例子中,我们可以使用for循环来迭代生成器对象,并依次打印每个返回的值。

yield的作用是使函数具有生成器的特性,即可以通过多次迭代产生一系列的值,而不是一次性返回所有的值。此外,使用yield可以让生成器函数在迭代时暂停并恢复执行,从而避免了一次性返回大量的数据造成的性能问题。

除了使用yield返回值之外,yield语句还可以接收调用者传入的值。例如:

def my_generator():

    i = 0

    while True:

        i += 1

        value = yield i

        if value is not None:

            i = value

gen = my_generator()

print(next(gen))   # 输出 1

print(gen.send(10)) # 输出 11

print(next(gen))   # 输出 12

print(gen.send(5))  # 输出 6

print(next(gen))   # 输出 7

在这个例子中,我们定义了一个无限循环的生成器函数my_generator(),每次循环都会产生一个数字。此外,该函数还可以接收一个值,并将其赋值给i。在第一次调用next()函数时,生成器函数会从yield i语句挂起,并返回i的当前值1。在第二次调用gen.send(10)时,生成器函数会从yield i语句继续执行,并将10赋值给value,然后返回i的新值11。在第三次调用next()函数时,生成器函数会继续执行,并返回i的新值12。同样,在第四次调用gen.send(5)时,生成器函数会从yield i语句继续执行,并将5赋值给value,然后返回i的新值6。

总之,使用yield可以让函数具有生成器的特性,从而产生一系列的值,而不是一次性返回所有的值。此外,使用yield还可以接收调用者传入的值,并将其赋值给函数内部的变量,从而实现更加灵活的生成器。