普通函数和生成器的区别

# 生成器(Generator)
'''
在 Python中,把使用了yield的函数成为生成器(generator)
生成器是一种特殊的迭代器,
它在形式上和函数很像,只是return换成了yiled。
函数在遇到return关键字时,会返回值并结束函数。
而生成器在遇到yiled关键字时,会返回迭代器对象,但不会立即结束,而是保存当前的位置,
下次执行时会从当前位置继续执行。
'''

# 下面分别使用普通函数和生成器实现斐波那契数列的功能,依次来说明它们的不同之处。

# (1)定义普通函数

# 普通斐波那契函数定义
def get_fibonacci(max):
    # max:数量
    fib_list = [0,1]
    # 保存菲波那切数列的列表,初始值为0和1
    while len(fib_list) < max:
        fib_list.append(fib_list[-1]+fib_list[-2])
        # 最后两个值相加
    return fib_list

# 主函数
if __name__ == "__main__":

    # 函数调用,输出前10个斐波那契数列的值:0 1 1 2 3 5 8 13 21 34
    for m in get_fibonacci(10):
        print(m,end=" ")
'''
因为函数只能返回一次,所以每次计算得到的斐波那契数列必须全部存储到列表中,
最后再使用return将其返回。
'''

# (2)使用yield的函数--生成器

# 使用yield的菲波那切函数定义
def get_fibonacci2(max):
    n1 = 0
    # 第一个值

    n2 = 1
    # 第二个值

    num = 0
    # 记录数量

    while num < max:
        yield n1
        n1,n2 = n2,n1+n2
        num += 1

# 主函数
if __name__ == "__main__":

    # 输出前10个斐波那契数列的值:0 1 1 2 3 5 8 13 21 34
    for n in get_fibonacci2(10):
        print(n,end=" ")

'''
yield一次返回一个数,不断返回多次。
程序执行的流程图如下:
通过函数get_fibonacci2()实现菲波那切数列时,没有将其保存于列表中,
而是通过yield实时将其返回
在主函数中,使用for循环遍历生成器。
执行第一次循环时,调用生成器函数get_fibonacci2(),
函数运行到yield时,返回n1,函数暂停执行,并记录当前位置,
然后执行for循环的循环体print(n,end=" "),打印n1的值。
下一次循环,函数从上次暂停的位置继续执行,直到遇到yield,
如此往复,直到结束。
'''
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值