生成器的创建方式

生成器的介绍

根据规则循环生成数据,当条件不成立则生成数据结束,数据不是一次性全部生成出来,而是使用一个生成一个,可以节省大量内存.

创建生成器的方式

1.生成器推导式
2.yield关键字
生成器推导式与列表推导式类似只不过生成器推导式使用小括号

my_generator=(i * 10 for i in range(5))
print(my_generator)
# next获取生成器当下一个值
value=next(my_generator)
print(value)
# 遍历生成器
for value in my_generator:
    print(value)

next函数获取生成器中的下一个值
for循环遍历生成器中的每一个值

yield关键字

只要在def函数里看到有yield关键字就是生成器

def def mygenerator(n):
    for i in range(n):
        print('开始生成')
        yield i
        print('完成一次')
if __name__ == '__main__':
    g=mygenerator(2)
    #result=next(g)
    #print(result)
    for i in g:
    	print(i)

代码说明:
1.代码指定到yield会暂停,然后把结果返回去,下次启动生成器会在暂停的位置继续往下执行.
2.生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出Stoplteration异常,表示停止迭代异常
3.while循环内部没有处理异常操作,需要手动添加处理异常操作
4.for循环内部自动处理了停止迭代异常,使用起来更加方便

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中生成器是一种特殊的迭代器,可以用来生成一个序列,而不需要一次性将所有元素都存储到内存中。生成器可以通过函数、生成器表达式等方式创建。 1. 使用函数生成器 函数生成器可以通过 yield 语句来生成一个序列。当函数被调用时,它会返回一个生成器对象,而不是执行函数体内的所有代码。当我们使用 next() 函数调用生成器时,函数会从上次调用 yield 语句处继续执行,直到遇到下一个 yield 语句或函数结束。 例如,下面是一个简单的函数生成器,用来生成斐波那契数列: ```python def fibonacci(): a, b = 0, 1 while True: yield a a, b = b, a + b ``` 当我们调用该生成器时,它会返回一个生成器对象,然后我们可以使用 next() 函数来获取序列中的每一个元素: ```python f = fibonacci() print(next(f)) # 0 print(next(f)) # 1 print(next(f)) # 1 print(next(f)) # 2 print(next(f)) # 3 ``` 2. 使用生成器表达式 生成器表达式是一种更简单、更紧凑的生成器创建方式,类似于列表推导式。它的语法形式为:(expression for variable in iterable if condition)。其中,expression 是生成器元素的计算表达式,variable 是迭代变量,iterable 是可迭代对象,condition 是可选的条件表达式。 例如,下面是一个使用生成器表达式来生成一个列表中所有偶数的生成器: ```python numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] even_numbers = (x for x in numbers if x % 2 == 0) ``` 当我们调用该生成器时,它会返回一个生成器对象,然后我们可以使用 next() 函数来获取序列中的每一个元素: ```python print(next(even_numbers)) # 2 print(next(even_numbers)) # 4 print(next(even_numbers)) # 6 print(next(even_numbers)) # 8 print(next(even_numbers)) # 10 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值