Python 入门之 Python三大器 之 迭代器

1、迭代器

(1)可迭代对象:

<1> 只要具有__ iter __()方法就是一个可迭代对象

(我们可以通过dir()方法去判断一个对象具有什么方法,dir()会返回一个列表,这个列表中含有该对象的以字符串的形式的所有方法名)

lst.__iter__()
dict.__iter__()

<2> 可迭代对象的优点:

可以直观的查看里面的数据。

<3> 可迭代对象的缺点:

占用内存

可迭代对象不能迭代取值(除去索引,key以外)

(2)迭代器:工具

<1> 具有__ iter __ () 和 __ next __() 两个方法的就是迭代器

( iter() 和 __ ite r__() 是一样的 推荐使用iter() )

lst = [1,2,3,4,5]
l = lst.__iter__() # 将可迭代对象转换成迭代器 l.__iter__() # 迭代器指定__iter__()还是原来的迭代器
print(l.__next__()) # 1
print(l.__next__()) # 2

<2> 迭代器基于上一次停留的位置,进行取值

<3> 迭代器的优点:

惰性机制: 节省空间

<4>迭代器的缺点:

不能直接查看值,迭代器查看到的是一个迭代器的内存地址
一次性,用完就没有了
不能逆行(后退)

<5> 应用

​ 当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。(可参考为什么python把文件句柄设置成迭代器)。

(3)空间换时间:容器存储大量的元素,取值时间短,但是容器占用空间大

(4)时间换空间:迭代器就是节省了空间,但是取值时间较长

(5)for 循环的本质:(重点)

l1 = [1, 2, 3, 4, 5, 6]
obj = iter(l1) # 1 将可迭代对象转化成迭代器
while True: # 2,利用while循环,next进行取值
try:
print(next(obj))
except StopIteration: # 3,利用异常处理终止循环
break

(6)Python2和Python3中的区别:

pyhton3:
iter()和 __iter__() 都有
next()和__next__()都有 python2:
iter()
next()

Python 入门之 Python三大器 之 迭代器的更多相关文章

  1. Python 入门之 Python三大器 之 生成器

    Python 入门之 Python三大器 之 生成器 1.生成器 (1)什么是生成器? 核心:生成器的本质就是一个迭代器 迭代器是Python自带的 生成器程序员自己写的一种迭代器 def func( ...

  2. Python 入门之 Python三大器 之 装饰器

    Python 入门之 Python三大器 之 装饰器 1.开放封闭原则: (1)代码扩展进行开放 ​ 任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代 ...

  3. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  4. Python入门之 Python内置函数

    Python入门之 Python内置函数 函数就是以功能为导向,一个函数封装一个功能,那么Python将一些常用的功能(比如len)给我们封装成了一个一个的函数,供我们使用,他们不仅效率高(底层都是用 ...

  5. Python 入门之Python简介

    Python 入门之Python简介 1.Python简介: (1) Python的出生: ​ python的创始人为吉多·范罗苏姆(Guido van Rossum)(中文名字:龟叔).1989年的 ...

  6. Python 入门之Python基础数据类型及其方法

    Python 入门之Python基础数据类型 1. 整型:int 用于计算,用于比较 (在赋值的时候先执行等号右边的内容) 1.1 整数的加 a = 10 b = 20 print(a + b) 结果 ...

  7. Python 入门之Python基础知识

    Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 ...

  8. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  9. 2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python

    知乎原链 Python 3.6.5官方入门教程中示例代码汉化后演示 对应在线文档: 3. An Informal Introduction to Python 不知如何合集, 请指教. 中文代码示例P ...

随机推荐

  1. python2---输出1--100之间的偶数

    #!/usr/bin/env python方法1:num = 1while num <= 100: if num % 2 == 0: print(num) num += 1方法2: #!/usr ...

  2. springmvc/springboot开发restful API

    非rest的url写法: 查询 GET /user/query?name=tom 详情 GET /user/getinfo? 创建 POST /user/create?name=tom 修改 POST ...

  3. CloudSim学习

    CloudSim CloudSim是墨尔本大学云计算和分布式系统实验室推出的云计算模拟软件.它可以使研究者规避实际部署的诸多不便(比如说资金缺乏等因素),在单机上即可实现对大规模云集群的模拟和相应算法 ...

  4. AtCoder AGC001F Wide Swap (线段树、拓扑排序)

    题目链接: https://atcoder.jp/contests/agc001/tasks/agc001_f 题解: 先变成排列的逆,要求\(1\)的位置最小,其次\(2\)的位置最小,依次排下去( ...

  5. 编译rxtx

    https://blog.csdn.net/github_29989383/article/details/51886234 https://cloud.tencent.com/developer/a ...

  6. LeetCode_1114.按顺序打印(多线程)

    LeetCode_1114 LeetCode-1114.按顺序打印 我们提供了一个类: public class Foo { public void one() { print("one&q ...

  7. ffplay播放PCM裸流

    ffplay -f s16le -ar 48000 -ac 2 d:\lei.pcm

  8. MYSQL,分别用一条语句交换两列的值与两行的值

    测试表: CREATE TABLE `test` ( `id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, ` DEFAULT CHARSET=utf8 ...

  9. ef和ashx的简单测试

    在这里.小弟我默默的计算了一下用一般处理程序和MVC配合EF,到底哪个快,事实问题是我感觉都差不多,因为用的是EF,所以要提高访问速率,我觉得还是要从数据访问做起: 一般处理程序代码: private ...

  10. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_6 Mybatis的CRUD-保存操作的细节-获取保存数据的id

    保存后得到id 默认查询出来的是0,因为没有插入就要得到最后的id值. insert语句跟在前面就可以获取到id了 新插入的这条数据就是51 order=after表示在insert语句后再去获取id ...