Python中生成器是如何实现长尾函数调用的原理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2260个文字,预计阅读时间需要10分钟。
生成器的使用+在+Python+中,如果一个函数定义内部使用了+yield+关键字,那么在执行函数的时候返回的是一个生成器,而不是常规函数的返回值。我们先来看一个常规函数的定义:++下+。
生成器的使用在 Python 中,如果一个函数定义的内部使用了 yield 关键字,那么在执行函数的时候返回的是一个生成器,而不是常规函数的返回值。
我们先来看一个常规函数的定义,下面的函数 f() 通过 return 语句返回 1,那么 print 打印的就是数字 1。
def f():
return 1
print(f())
如果我们将上面的 return 改成 yield,也就是下面这样
def f():
yield 1
yield 2
g = f()
print(g)
print(next(g))
print(next(g))
print(next(g))
最终的输出如下,调用函数 f() 得到的是一个生成器(generator)对象 g,通过 Python 内置的 next() 函数可以驱动生成器往下执行,每调用一次 next() 函数,生成器就会执行到下一个 yield 语句处,并将 yield 语句中的表达式返回,当没有更多 yield 语句时继续执行 next() 函数会触发 StopIteration 异常。
本文共计2260个文字,预计阅读时间需要10分钟。
生成器的使用+在+Python+中,如果一个函数定义内部使用了+yield+关键字,那么在执行函数的时候返回的是一个生成器,而不是常规函数的返回值。我们先来看一个常规函数的定义:++下+。
生成器的使用在 Python 中,如果一个函数定义的内部使用了 yield 关键字,那么在执行函数的时候返回的是一个生成器,而不是常规函数的返回值。
我们先来看一个常规函数的定义,下面的函数 f() 通过 return 语句返回 1,那么 print 打印的就是数字 1。
def f():
return 1
print(f())
如果我们将上面的 return 改成 yield,也就是下面这样
def f():
yield 1
yield 2
g = f()
print(g)
print(next(g))
print(next(g))
print(next(g))
最终的输出如下,调用函数 f() 得到的是一个生成器(generator)对象 g,通过 Python 内置的 next() 函数可以驱动生成器往下执行,每调用一次 next() 函数,生成器就会执行到下一个 yield 语句处,并将 yield 语句中的表达式返回,当没有更多 yield 语句时继续执行 next() 函数会触发 StopIteration 异常。

