Python生成器

#author F

#迭代器

#列表生成式
list_build = [2*i for i in range(0, 24)]  #2*i可以改成某函数
print(list_build)
# 相当于三行代码
list_man_made = []
for i in range(0, 24):
    list_man_made.append(2*i)
print(list_man_made)

#生成器 : 只有在调用时候才会产生对应的数据  只记住当前的位置 只有一个__next__()方法
# cc = [2*i for i in range(0, 24000000000)]
'''
c = ( 2*i for i in range(0, 24000000000)) #c存的是内存地址,存了一个算法,并没有将整个列表生成
for i in c:
    print(i)
#生成器和列表的区别是:调用时候才有数据 不调用则没有数据 加快了运行时间
print(c.__next__())
'''

#斐波那契数列
#1,1,2,3,5,8,13,21,...
def fib(max):
    n, a, b = 0, 0, 1
    while n<max:
        print(b)
        a, b=b, a+b
        n = n+1
    return 'done'
##赋值语句 a,b=b,a+b 赋值过程
# t = (b, a+b) #t是一个tuple
# a=t[0]
# b=t[1]
fib(100)

def fib1(max):
    n, a, b = 0, 0, 1
    while n<max:
        yield b
        a, b=b, a+b
        n = n+1
    return 'done'  #用for循环done不会打印
print(fib1(10))
f = fib1(10)
print(f.__next__())
print(f.__next__())
print("干点别的事去")
print(f.__next__())
print(f.__next__())
print("==start==")
for i in f:
    print(i)

##函数有yield存在就回变成一个生成器 return的值用异常抓取

def fib2(max):  #这个已经不是函数了  只要有yield存在 就不是函数了 
    n, a, b = 0, 0, 1
    while n<max:
        yield b
        a, b = b, a+b
        n = n+1
    return "done"  #可以用来抛出异常

g = fib2(6)
while True:
    try:
        x = next(g)
        print("g:",x)
    except StopIteration as e:
        print("Generator return value:", e.value)
        break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值