Python函数的迭代器与生成器的示例代码
函数的迭代器
函数的强大功能叫做迭代器,Python里面最具威力的功能之一。迭代器我们听起来会感觉非常陌生,在list、tuple都有用到它,我们是使用for和in取列表中的每一个元素,对每个元素依次处理,这种方法就叫做迭代,实现这种方法的函数叫做迭代器。迭代器中有两个基本的函数,这个函数叫做方法,这个是面向对象编程称呼的一个方法,这两个方法叫做iter()和next()。
1.什么是迭代?迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来
2.要想了解迭代器到底是什么?必须先了解一个概念,即什么是可迭代的对象? 可迭代的对象:在python中,但凡内置有'‘iter''方法的对象,都是可迭代的对象
3.迭代器:迭代取值工具,可迭代的对象执行iter方法得到的返回值就是迭代器对象
举例演示-迭代器定义一个列表,处理成处理器
list1=[1,2,3,4] it=iter(list1)#赋值变量 print(next(it)) print(next(it)) print(next(it)) print(next(it))
举例演示-输出异常
list1=[1,2,3,4] it=iter(list1)#赋值变量 print(next(it)) print(next(it)) print(next(it)) print(next(it)) print(next(it))#except,超出列表范围会报错误信息StopIteration
总结
每调用一次next()会输出iter()里面的下一个元素
一直到输出完成
超出长度就会出现异常
函数的生成器
我们感受到迭代器的功能的强大,如何自己制作一个迭代器呢?
举例演示-简单迭代器range()函数
for i in range(10,20,2):#第一个参数是开始参数;第二个参数是结束参数;第三个参数是步长 print(i)
如果步长为小数0.5是否可以,则会返回类型错误的信息
Range()函数必须是整数哦
举例演示-如何优化上述问题,支持小数
引用yield,带yield的函数就叫做生成器
def frange(start,stop,step): x=start#定义一个变量 while x<stop: yield x #没有yield,while会把所有的值一次性进行返回;yield运行到这个位置,会暂停记录当前的位置,当你再次去调用一个next的时候,会根据当前的位置返回一个值给你 x+=step for i in frange(10,20,0.5): print(i)
到此这篇关于Python函数的迭代器与生成器的文章就介绍到这了,更多相关Python函数的迭代器与生成器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
Python函数式编程指南(四):生成器详解
4. 生成器(generator) 4.1. 生成器简介 首先请确信,生成器就是一种迭代器.生成器拥有next方法并且行为与迭代器完全相同,这意味着生成器也可以用于Python的for循环中.另外,对于生成器的特殊语法支持使得编写一个生成器比自定义一个常规的迭代器要简单不少,所以生成器也是最常用到的特性之一. 从Python 2.5开始,[PEP 342:通过增强生成器实现协同程序]的实现为生成器加入了更多的特性,这意味着生成器还可以完成更多的工作.这部分我们会在稍后的部分介绍. 4.2. 生成
-
深入理解python函数递归和生成器
一.什么是递归 如果函数包含了对其自身的调用,该函数就是递归的.递归做为一种算法在程序设计语言中广泛应用,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.例如,要计算1-9的9位数字的乘积,直观的算法是1*2*3*4*5*6*7*8*9,如果要计算1-10000的乘积,直观的算法就难于实现出,而递归就可以很简单的实现.请看示例: def fact(n):#计算给定数字到一的乘积 i
-
对Python 3.2 迭代器的next函数实例讲解
在python中,使用iter函数可以获得有序聚合类型的迭代器,我个人将迭代器理解为带有next指针的单向链表,获取到的迭代器为链表的表头,表头内容为空,next指针指向有序聚合类型的第一个元素.在访问链表最后一个元素的next指针时,python会报错StopIteration. Python3.x以上的版本在使用next函数时需要注意的是:next()函数在3.x以上的版本更改为__next__(). 使用for迭代器打印文件中的内容的代码如下: file_obj=open(r'E:\Pro
-
Python函数式编程指南(三):迭代器详解
3. 迭代器 3.1. 迭代器(Iterator)概述 迭代器是访问集合内元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束. 迭代器不能回退,只能往前进行迭代.这并不是什么很大的缺点,因为人们几乎不需要在迭代途中进行回退操作. 迭代器也不是线程安全的,在多线程环境中对可变集合使用迭代器是一个危险的操作.但如果小心谨慎,或者干脆贯彻函数式思想坚持使用不可变的集合,那这也不是什么大问题. 对于原生支持随机访问的数据结构(如tuple.list),迭代器和经典fo
-
python 迭代器和iter()函数详解及实例
python中迭代器和iter()函数 迭代器为类序列对象提供了一个类序列的接口.python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象.迭代器用起来很灵巧,你可以迭代不是序列但表现处序列行为的对象,例如字典的键.一个文件的行,等等.迭代器的作用如下: •提供了刻扩展的迭代器接口: •对列表迭代带来了性能上的增强: •在字典迭代中性能提升: •创建真正的迭代接口,而不是原来的随即对象访问: •与所有已经存在的用户定义的类以及扩展得模拟序列和映射的对象向后兼容:
-
Python用zip函数同时遍历多个迭代器示例详解
前言 本文主要介绍的是Python如何使用zip函数同时遍历多个迭代器,文中的版本为Python3,zip函数是Python内置的函数.下面话不多说,来看详细的内容. 应用举例 >>> list1 = ['a', 'b', 'c', 'd'] >>> list2 = ['apple', 'boy', 'cat', 'dog'] >>> for x, y in zip(list1, list2): print(x, 'is', y) # 输出 a is
-
Python函数的迭代器与生成器的示例代码
函数的迭代器 函数的强大功能叫做迭代器,Python里面最具威力的功能之一.迭代器我们听起来会感觉非常陌生,在list.tuple都有用到它,我们是使用for和in取列表中的每一个元素,对每个元素依次处理,这种方法就叫做迭代,实现这种方法的函数叫做迭代器.迭代器中有两个基本的函数,这个函数叫做方法,这个是面向对象编程称呼的一个方法,这两个方法叫做iter()和next(). 1.什么是迭代?迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来 2.要想了解迭代器到底是什么?必须先了解一个概
-
一文搞懂python 中的迭代器和生成器
可迭代对象和迭代器 迭代(iterate)意味着重复,就像 for 循环迭代序列和字典那样,但实际上也可使用 for 循环迭代其他对象:实现了方法 __iter__ 的对象(迭代器协议的基础).__iter__方法返回一个迭代器,它是包含方法 __next__ 的对象,调用时可不提供任何参数:当你调用 __next__ 时,迭代器应返回其下一个值:如果没有可供返回的值,应引发 StopIteration 异常:也可使用内置函数 next(),此种情况下,next(it) 与 it.__next(
-
python三大器之迭代器、生成器、装饰器
目录 迭代器 生成器 装饰器(非常实用!) 迭代器 聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某一段代码块,并将每一次迭代得到的结果作为下一次迭代的初始值).可迭代对象(iterable):是指该对象可以被用于for…in…循环,例如:集合,列表,元祖,字典,字符串,迭代器等. 在python中如果一个对象实现了 __iter__方法,我们就称之为可迭代对象,可以查看set\list\tuple…等源码内部均实现了__iter
-
Python快速实现一个线程池的示例代码
目录 楔子 Future 对象 提交函数自动创建 Future 对象 future.set_result 到底干了什么事情 提交多个函数 使用 map 来提交多个函数 按照顺序等待执行 取消一个函数的执行 函数执行时出现异常 等待所有函数执行完毕 小结 楔子 当有多个 IO 密集型的任务要被处理时,我们自然而然会想到多线程.但如果任务非常多,我们不可能每一个任务都启动一个线程去处理,这个时候最好的办法就是实现一个线程池,至于池子里面的线程数量可以根据业务场景进行设置. 比如我们实现一个有 10
-
Python实现孤立随机森林算法的示例代码
目录 1 简介 2 孤立随机森林算法 2.1 算法概述 2.2 原理介绍 2.3 算法步骤 3 参数讲解 4 Python代码实现 5 结果 1 简介 孤立森林(isolation Forest)是一种高效的异常检测算法,它和随机森林类似,但每次选择划分属性和划分点(值)时都是随机的,而不是根据信息增益或基尼指数来选择. 2 孤立随机森林算法 2.1 算法概述 Isolation,意为孤立/隔离,是名词,其动词为isolate,forest是森林,合起来就是“孤立森林”了,也有叫“独异森林”,好
-
python画双y轴图像的示例代码
很多时候可能需要在一个图中画出多条函数图像,但是可能y轴的物理含义不一样,或是数值范围相差较大,此时就需要双y轴. matplotlib和seaborn都可以画双y轴图像. 一个例子: import seaborn as sns import matplotlib.pyplot as plt # ax1 for KDE, ax2 for CDF f, ax1 = plt.subplots() ax1.grid(True) # ax1.set_ylim(0, 1) ax1.set_ylabel('
-
用python实现刷点击率的示例代码
背景 同事的老爸参加微信的一个活动,需要刷点击率,因此,写了一个程序助之. 准备 微信活动也是有真实地址的. 通过mitmproxy(man in the middle proxy)的方式,可以获取微信获取网页的真实地址(url). 完整可运行代码 import os import time import argparse import platform def visit_win(url, times, duration): import urllib2 def _visit_win(): t
-
Python Learning 列表的更多操作及示例代码
遍历列表-for循环 列表中存储的元素可能非常多,如果想一个一个的访问列表中的元素,可能是一件十分头疼的事.那有没有什么好的办法呢?当然有!使用 for循环 假如有一个食物名单列表,通过 for循环 将列表中的食物名称都打印出来 # 定义一个食物名单列表 foods = ['potato', 'tomato', 'noodles', 'apple', 'pizza'] # 循环访问foods列表 for food in foods: print(food) 输出: potato tomato
-
Python实现RabbitMQ6种消息模型的示例代码
RabbitMQ与Redis对比 RabbitMQ是一种比较流行的消息中间件,之前我一直使用redis作为消息中间件,但是生产环境比较推荐RabbitMQ来替代Redis,所以我去查询了一些RabbitMQ的资料.相比于Redis,RabbitMQ优点很多,比如: 具有消息消费确认机制 队列,消息,都可以选择是否持久化,粒度更小.更灵活. 可以实现负载均衡 RabbitMQ应用场景 异步处理:比如用户注册时的确认邮件.短信等交由rabbitMQ进行异步处理 应用解耦:比如收发消息双方可以使用
-
Python爬虫实现vip电影下载的示例代码
爬虫目的 实现对各大视频网站vip电影的下载,因为第三方解析网站并没有提供下载的渠道,因此想要实现电影的下载. 实现思路 1.选择一个合适的vip解析网站,这里选择了无名小站的接口,因为尝试了很多网站,有些网站想要爬取很困难,无名小站相对简单,接口为www.wmxz.wang/video.php?url=[vip电影的链接] 2.利用Fiddler进行抓包,模拟浏览器发送post请求,获取电影实际下载地址. 3.使用PyQt5进行包装,实现多样化的功能.(可选) 页面分析 我使用Fiddler抓
随机推荐
- SSL常用专业缩略语汇总
- jsp实现Servlet文件下载的方法
- Tomcat集群和Session复制应用介绍
- .net从服务器下载文件中文名乱码解决方案
- asp.net 1.1/ 2.0 中快速实现单点登陆
- document.execCommand()的用法小结
- PHP CURL函数库第1/2页
- Docker如何使用OpenvSwitch网桥
- 详解nodejs中express搭建权限管理系统
- java volatile关键字的含义详细介绍
- javascript onkeydown实现键盘快捷键控制页面
- JavaScript Array Flatten 与递归使用介绍
- 基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
- 微信小程序 UI与容器组件总结
- 微信小程序之数据双向绑定与数据操作
- 详解Nginx中HTTP的keepalive相关配置
- 在RHEL 6.5上使用yum更新/安装软件的操作方法
- C#中this指针的用法示例
- 深入剖析Java编程中的序列化
- CodeIgniter整合Smarty的方法详解