十一、python生成器和迭代器

本文介绍了Python中列表生成式的使用方法及优缺点,并详细解释了如何利用生成器(generator)来节省内存空间,包括使用生成器表达式和定义生成器函数的方法。此外,还通过斐波拉契数列实例展示了生成器的具体应用。
一、列表生成式:
1、生成一个列表:
list = [ i*2 for i in range(10)]       #使用列表生成式生成一个列表,占据内存空间,当数量大时会造成很大的浪费。
print(list)
 
2、使用生成器生成列表:(generator)
list1 = ( i*2 for i in range(10))      #将生成列表的公式存在变量中,需要的时候取一下,(注:缺点是只能往后一个个取)
print(list1.__next__())                    #使用__next__取数据,一次取一个数,当取完时抛出StopIteration错误
for i in list1:              #由于一次一次的取比较麻烦,我们还可以使用for循环来取
    print(i)                
 
3、如果需要推算的结果使用列表无法生成式,我们还可以使用函数来制作生成器,如斐波拉契数列。
斐波拉契数列:(fibonacci)
介绍:斐波拉契数列,是一种除了第一个和第二个数外,任意一个数都可由前两个数相加得到
由python函数实现斐波拉契数列:
def fib(a,b,max):                           #a是指斐波拉契中的第一个数,b指斐波拉契中的第二个数,max指相加几次
    n=0
    while n<max:
        print(b)
        a,b=b,a+b
        n=n+1
        return'done'
fib(10,15,12)
如果要将上面的函数变成生成器,只要将print(b)改成yield b就可以了
yield:每次调用到yield时返回结果,并保存现在的位置,再次执行时从保存的位置继续。
def fib(a,b,max):
    n = 0
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
 
f = (fib(10,15,12))                #将函数指定为一个变量,通过变量来取值,不然无法边取值边传参。
print(f.__next__())
print(f.__next__())
print(f.__next__())
 

转载于:https://www.cnblogs.com/caibaofei/p/8991715.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值