五分钟学会python编程_每天五分钟python编程:生成器技术是python语言最强大的技术之一...

本文详细介绍了Python中的生成器及其优势,强调了在处理大量数据时如何避免一次性加载所有元素导致的内存浪费。通过将列表转换为生成器,可以实现按需生成元素,提高效率。生成器函数中的`yield`关键字用于暂停函数执行并保存状态,允许后续迭代从上次离开的地方继续。此外,还讨论了`yield`的功能,包括返回值和接收参数,并通过实例解析了其工作原理。
摘要由CSDN通过智能技术生成

动态方式生成列表

这样的方式生成列表会有一个特点:就是列表中的元素都是一下子生成的,因为这里之生成10个元素,因为元素数量比较少,所以体会不到,当我们这样的话:[i for i in range(10000)],这个程序为了形成列表会循环10000次,然后生成列表,这个速度会很慢,而且我们可能有时只需要列表中的前10个数据,而10之后的用不到,这就造成了资源内存的浪费,为了解决这个问题,我们可以使用python生成器。

生成器

要想将[i for i in range(10000)]变成生成器会非常的简单,只需要将[]改成()即可,这就是生成器,比如

现在list里面没有任何元素,只有我们使用list的时候才会有生成元素,元素使用到哪里,迭代器就生成到哪里的元素,而且使用的时候必须只能从索引为0开始使用,也就是从第一位开始逐渐往后生成,不可以直接调到其它位置使用,比如:

而且生成器的索引只能往后走,不能倒退

该程序生成了一个生成器,其中第一个循环对其进行遍历,因为是初次遍历,所以肯定是从索引0开始的,第二次进行遍历,因为生成器的光标只能往下走,所以第二次的遍历并不是从头开始遍历,而是继续当前光标进行遍历,接下来输出next也是接着当前的坐标进行遍历。

yield

我们可以在方法中使用yield,从而将方法变成一个生成器函数,当生成器函数内部调用yield,生成器函数的状态会被冻结,所有的变量的值会被保留下来,下一行要执行的代码的位置也会被记录,直到再次调用next()。一旦next()再次被调用,生成器函数会从它上次离开的地方开始。如果永远不调用next(),yield就一直记录原来的文字。

程序

结果

每调用一次fun()就会生成一个动态列表,所以list和list1不是同一个动态列表,这个动态列表的全部内容是["huan","feng","de","bian","cheng","ri","ji"]这个不是一次生成的,而是每调用一次动态列表,迭代器会往下执行,直到执行到yield,此时程序停止,然后生成一个列表元素,我们就可以获取到了。

在生成器函数中,return的作用就是返回异常,当执行到return的时候,会把它当作异常返回给调用者

我们可以对其进行异常处理

yield的两个功能

功能一:第一返回参数(next)

功能二:第二是执行接收参数(send)

会有以下几种情况:

一:执行功能一,然后执行功能二,不断交替执行

二:执行功能一,然后继续执行功能一,也就是不断next,这样功能二就被跳过了

三:执行功能二,也就是跳过功能一,但有一点需要注意,就是第一个yield不可以跳过功能1

举例一,全部执行功能1

过程分析:第一个next会执行返回数据获取到11,输出11(因为没有send方法,所以接收数据环节全部省略)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值