python-生成器

Posted liuxu2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-生成器相关的知识,希望对你有一定的参考价值。

python-生成器

当我们需要在创建一个包含1亿数量元素的列表时,而我们可能只会使用其中的10个元素。如果通过列表的方式创建,则会存在极大的内存消耗。此时最好的方法就是需要多少就创建多少。

在Python中,这种一边循环一边计算后面元素的机制,称为生成器:generator。生成器只会保存计算下一个元素的算法,变循环边产生下一个需要的元素。

创建一个生成器的方法有两种:列表生成器&函数生成器

列表生成器

对于简单的需要,如果算法很简单。则可以使用列表程生成器。列表生成器很简单,只需要把列表推导式的[]换成()即可

访问元素时,可以通过next函数循环调用生成器,直到生成器中国所有的元素被输出完毕,再通过next调用则会报错。为了避免程序中断,可以通过for循环的额方式调用你生成器

g= (i for i in range(10))
print(g)
print(g.__next__())
print(next(g))
for i in g:
    print(i, end=' ')

#output:
<generator object <genexpr> at 0x00000230962A5A48>
0
1
2 3 4 5 6 7 8 9 

函数生成器

对于复杂的算法,列表生成器就难以满足需求。此时可以使用函数生成器。函数生成器用法也很简单。我们知道普通函数的返回值是通过return返回,对于函数生成器,只需要把return换为yield即可。

我们下面通过一个斐波那契额数列简单介绍函数生成器的基本使用。

# 斐波那契数列
1 1 2 3 5 8 13 21 34 55 89 ....

思路,斐波那契额数列中每个元素是前面两个元素的加和(如果默认第一个元素是0)

需求:打印斐波那契数列中前10个数字

def fun_fib(n):
    a = 0
    b = 1
    for i in range(n):
        yield b
        a,b = b, a+b
for i in fun_fib(10):
    print(i, end=' ')

# output:
1 1 2 3 5 8 13 21 34 55 

在普通函数中,程序进入函数后,执行到return语句程序将跳出函数。再次进入函数后,从头开始直到遇到return语句跳出函数,即程序将永远不会执行return语句后面的语句。

但是在函数生成器中,程序进入函数后当执行到yield语句后,程序跳出函数,当再次进入函数后,程序将继续执行yield后的语句。

以上是关于python-生成器的主要内容,如果未能解决你的问题,请参考以下文章

postman 自动生成 curl 代码片段

Apollo Codegen 没有找到生成代码的操作或片段

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

vscode代码片段生成vue模板

常用python日期日志获取内容循环的代码片段