python面向对象:生成器

生成器

一、生成器表达式

  • 在Python中使用了yield的函数被成为生成器(generator)

当一个列表中含大量元素时,如果一次性生成这些元素并保存在列表中,将大量的内存空间,对于这个问题,我们可以通过生成器(generator)来解决,根据需要进行计算并获取列表中某个元素的值。

对于生成器对象,也可以向其他可迭代对象一样使用for循环遍历对象中的每一个元素。

  • 将列表生成表达式中的一堆中括号改为小括号即可
g = (x*x for x in range(10))  # 创建一个生成器对象并赋给g
print('g的类型:', type(g))
for i in g:
	print(i, end='')

g的类型为:<class’generator’>
0 1 4 9 16 25 36 49 64 81

如果生成元素的方法比较复杂,不适合用for循环方式实现,我们还可以借助yield关键字利用函数四号线生成器的功能。
例:实现faclist函数,一次生成1的阶乘,2的阶乘…n的阶乘。

def faclist(n): #定义函数faclist
	result = 1
    for x in range(2, n+1):  # 在2至n范围内一次取值
    	yield result # 遇到yield即暂停执行并返回result,下次执行时继续从此处开始执行
        result = x * result # 将x乘到result上
        
for y in Faclist(10): # 遍历faclist并输出每个元素的值
    print(y)

输出值:
1 2 6 24 120 720 5040 40320 362880

二、yield关键字

  • 使用yield实现斐波那契数列:
    在这里插入图片描述
import sys
def fibonacci(n): # 生成器函数 - 斐波那契
    a, b, counter = 0, 1, 0
    while True:
        if (counter > n):
            return
        yield a
        a, b = b, a + b
        counter += 1
f = fibonacci(10) # f是一个迭代器,由生成器返回生成
while True:
    try:
        print(next(f), end=' ')
    except StopIteration:
        sys.exit()

输出值:
0 1 1 2 3 5 8 13 21 34 55

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值