python中的生成器

41 篇文章 1 订阅
# Author Richard_Kong
# !/usr/bin/env python
# --*-- encoding:utf-8 --*--
"""
生成器:只有在调用的时候才会生成相应的数据
如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢,这样就不必创建
完整的list从而节省大量的内存空间,在python中,这样一边循环一边计算的机制叫生成器:generator

"""
b = [i*2 for i in range(10)] #这是一个列表
print(b)

g = (i*2 for i in range(10)) #这是一个生成器 就是把list的中括号变为小括号
print(g) #打印的是一个内存地址
"""
生成器 只记住当前位置,没有previous 只有next 只能一个一个的走
但是 我们创建了生成器generator后,一般不会用next()方法来调用元素,而是用for循环,而且也不用
考虑stopIteration的异常

"""
print(g.__next__())
print(g.__next__())
for n in g:
    print(n)
"""
用函数做一个生成器:
非波拉且函数
"""
def fib(max):
    """
    yield:关键字的作用
    yield关键字语句挂起该函数,并向调用者发送回一个值,
    但是保留足够的状态以使得函数能够从它离开的地方继续
    :param max:
    :return:
    """
    n,a,b =0,0,1
    while n<max:
        # print(b) # 想把函数变为生成器,就在输出的变量前加yield即可
        """
        如果一个函数定义中包含yield关键字,那么次函数就不再是普通的函数,而是一个生成器
        """
        print("fib 函数 yield关键字执行之前")
        yield b # 调用next函数 就会执行到yield这里,发送给调用者一个值
        print("fib 函数 yield关键字执行后")
        a,b =b,a+b
        n +=1

print("feibolaqie hanshu")
f = fib(10)
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
print("可以干点别的事儿")
print("再回来",f.__next__())
for n in f:
    print("in for xunhuan")
    print(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值