当前位置: 首页 > news >正文

python 可迭代对象和迭代器区别_python生成器,可迭代对象,迭代器区别和联系...

生成器,可迭代对象,迭代器之间究竟是什么关系?

用一幅图来概括:

81c5da97c52f7f1036bcd770bc13e9ec.png

1.生成器

定义生成器

方式一:

//区别于列表生成式 gen = [x*x for x in range(5)]

gen = (x*x for x in range(5))

print(gen) //Out: at 0x00000258DC5CD8E0>

方式二:

def fib():

prev, curr = 0, 1

while True:

yield curr

prev, curr = curr, curr + prev

f = fib()

print(f) //Out:

定义成功后,我们可以利用next()访问生成器下一个元素

print(next(gen)) //0

print(next(gen)) //1

...

print(next(gen)) //16

print(next(gen)) //StopIteration

但一般用for循环遍历

for n in gen:

print(n) //0 1 4 9 16

2.迭代器

任何实现了__iter__和__next__()方法的对象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一个值。所以生成器是特殊的迭代器,她内部具有这两种方法。

一个自定义的迭代器如下:

class Fib:

def __init__(self):

self.prev = 0

self.curr = 1

def __iter__(self):

return self

def __next__(self):

value = self.curr

self.curr += self.prev

self.prev = value

return value

f = Fib()

count = 1

for n in f:

print(n)

count = count+1

if count>=10:

break

//Out:1 1 2 3 5 8 13 21 34

3.可迭代对象

像list,tuple,set,dict,str等可以直接作用于for循环的对象,称为可迭代对象。可迭代对象实现了__iter__方法,用于返回迭代器。

demo = [1,2,3,4]

print(isinstance(demo, Iterable)) //True

iter_object = iter(demo)

print(iter_object) //

相关文章:

  • java打印文件_java 循环打印文件夹文件
  • java sql系统_用Java实现数据库应用系统
  • jmeter的java请求参数设置_jmeter之 java请求
  • java如何设置系统属性_java – 设置系统属性
  • java ajax增删改查_使用AJAX实现数据的增删改查
  • java去掉结尾的空格_如何从Java中显示的字符串末尾删除空格?
  • java最大回文字符串长度_Leet Code 5 最长回文子串 - Java
  • java泡沫_Java初认识--函数和数组
  • java虚拟机内存溢出的三个原因_JVM发生内存溢出的原因分析及解决方案
  • mysql更新多个字段php_PHP:如果语句无意中导致多个MySQL列更新?
  • properties java jar_propertiesutil jar包
  • python段落注释的语法格式是_Python 基础语法
  • python读取xml配置_python解析xml配置文件
  • java 接口数据类型_Java中的基本数据类型与引用数据类型
  • java 红包接口开发_java调用微信现金红包接口的心得与体会总结
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • extract-text-webpack-plugin用法
  • Java知识点总结(JavaIO-打印流)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Phpstorm怎样批量删除空行?
  • React组件设计模式(一)
  • Redux 中间件分析
  • SQLServer插入数据
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 百度小程序遇到的问题
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 今年的LC3大会没了?
  • 实现菜单下拉伸展折叠效果demo
  • 数组的操作
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用mpvue开发微信小程序
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • $.proxy和$.extend
  • (十) 初识 Docker file
  • .NET Remoting学习笔记(三)信道
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net实现客户区延伸至至非客户区
  • @ConditionalOnProperty注解使用说明
  • [16/N]论得趣
  • [2]十道算法题【Java实现】
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Angular] 笔记 7:模块
  • [autojs]逍遥模拟器和vscode对接
  • [BJDCTF2020]The mystery of ip
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • [C++]AVL树怎么转
  • [CF407E]k-d-sequence
  • [codevs 1296] 营业额统计
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽
  • [ffmpeg] 定制滤波器
  • [flume$2]记录一个写自定义Flume拦截器遇到的错误
  • [HDU 3555] Bomb [数位DP]
  • [HTML]Web前端开发技术12(HTML5、CSS3、JavaScript )——喵喵画网页