前言

迭代器、生成器、装饰器都有一个“器”,但他们之间没有什么关系。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()

一、迭代器优点

  • 从容器类型中一个一个的取值,会把所有的值都取到。
  • 节省内存空间,迭代器并不会在内存中再占用一大块内存,而是随着循环 每次生成一个,每次next每次给我一个,如下:

明显 list 占用内存空间比 range(0,50)大,只有 是可迭代对象的时候 才能用for,for循环本质就是迭代器

当我们遇到一个新的变量,不确定能不能for循环的时候,就判断 __iter__ 它是否可迭代

 二、迭代器介绍

1、dir 查看可调用方法:print(dir(list))

可以看到:int、bool 数据类型是没有 iter() 方法的。

print(dir(list))                    # 查看某数据类型拥有的所有可调用方法
print(dir([])) # [] == list
print('__iter__' in dir(int))
print('__iter__' in dir(bool))
print('__iter__' in dir(list))
print('__iter__' in dir(dict))
print('__iter__' in dir(set))
print('__iter__' in dir(tuple))
print('__iter__' in dir(enumerate([])))
print('__iter__' in dir(range(1)))

2、结论:

  • 只要含有 __iter__ 方法的都是可迭代的
  • 发现只要是能被 for 循环的数据类型,就一定拥有 __iter__ 方法
  • 一个数据类型执行了 __iter__() 方法之后的返回值就是一个迭代器

3、拥有 __iter__ 方法,可通过 __next__ 方法从迭代器中一个一个的取值,但不可逆。

# 通过 next 就可以从迭代器中一个一个的取值
ls = [1, 2, 3]
res = ls.__iter__() # 一个一个取值,不可逆
print(res.__next__()) #
print(res.__next__()) #
print(res.__next__()) #
print(res.__next__()) # list 只有 3个元素,所以这里会报错

4、实例验证迭代器是不是一定含有这两个方法:iter() 和 next()

图一:两个方法存在

图二:注释 next() 方法,不是迭代器,但可迭代

图三:注释 iter() 方法,都不是迭代器,或可迭代

from collections import Iterable, Iterator
class A:
''' # 内部含有__next__和__iter__方法的就是迭代器,缺一都不行 '''
def __iter__(self):pass
def __next__(self):pass res = A()
print(isinstance(res, Iterator)) # 迭代器
print(isinstance(res, Iterable)) # 可迭代

迭代器是可记住遍历位置的对象,你要多少就给你多少,美滋滋!欢迎来QQ交流群一起学习:482713805

python-20-迭代器是个什么东西?的更多相关文章

  1. python之迭代器与生成器

    python之迭代器与生成器 可迭代 假如现在有一个列表,有一个int类型的12345.我们循环输出. list=[1,2,3,4,5] for i in list: print(i) for i i ...

  2. python函数-迭代器&生成器

    python函数-迭代器&生成器 一.迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议: ① 协议内容:内部实现__iter__方法 ...

  3. python基础——迭代器

    python基础——迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器 ...

  4. python基础—迭代器、生成器

    python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...

  5. Python:迭代器的简单理解

    一.什么是迭代器 迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样).迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序 ...

  6. 第十六篇 Python之迭代器与生成器

    一.迭代器 一. 递归和迭代 生活实例说明什么是递归和迭代 A想去腾达大厦,问B怎么走路,B 说我不知道,我给你问问C,C也不知道,C又去问D,D知道,把路告诉了C,C又告诉B,B最后告诉A, 这就是 ...

  7. python——iterator迭代器|iterator详解——20140918|

    -----------------------------------------------------------------------------前言--------------------- ...

  8. 搞清楚 Python 的迭代器、可迭代对象、生成器

    很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...

  9. Python之迭代器,生成器

    迭代器 1.什么是可迭代对象 字符串.列表.元组.字典.集合都可以被for循环,说明他们都是可迭代的. from collections import Iterable l = [1,2,3,4] t ...

  10. Python之迭代器及生成器

    一. 迭代器 1.1 什么是可迭代对象 字符串.列表.元组.字典.集合 都可以被for循环,说明他们都是可迭代的. 我们怎么来证明这一点呢? from collections import Itera ...

随机推荐

  1. Algorithm: 多项式乘法 Polynomial Multiplication: 快速傅里叶变换 FFT / 快速数论变换 NTT

    Intro: 本篇博客将会从朴素乘法讲起,经过分治乘法,到达FFT和NTT 旨在能够让读者(也让自己)充分理解其思想 模板题入口:洛谷 P3803 [模板]多项式乘法(FFT) 朴素乘法 约定:两个多 ...

  2. ReactNative---android系统中Image组件无默认图片问题

    react native的Image组件通过网络地址加载图片的时候,若加载失败iOS有默认图片等属性,但安卓没有:但可以通过其他方式来实现: {Platform.OS == 'android'?< ...

  3. Shell使用技巧之逐行读取

    重定向读取 #!/bin/bash while read line do echo $line done < /etc/passwd 管道读取 #!/bin/bash cat /etc/pass ...

  4. 线程池技术之:ThreadPoolExecutor 源码解析

    java中的所说的线程池,一般都是围绕着 ThreadPoolExecutor 来展开的.其他的实现基本都是基于它,或者模仿它的.所以只要理解 ThreadPoolExecutor, 就相当于完全理解 ...

  5. Ceph 存储集群7-故障排除

    Ceph 仍在积极开发中,所以你可能碰到一些问题,需要评估 Ceph 配置文件.并修改日志和调试选项来纠正它. 一.日志记录和调试 般来说,你应该在运行时增加调试选项来调试问题:也可以把调试选项添加到 ...

  6. used in key specification without a key length

    官方的解释: The error happens because MySQL can index only the first N chars of a BLOB or TEXT column. So ...

  7. Angular 从入坑到挖坑 - Angular 使用入门

    一.Overview angular 入坑记录的笔记第一篇,完成开发环境的搭建,以及如何通过 angular cli 来创建第一个 angular 应用.入坑一个多星期,通过学习官方文档以及手摸手的按 ...

  8. 每日一练_PAT_B1001

    鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”.鲁宾逊先生和多多都很开心,因为花生正是他们的最爱.在 ...

  9. Java查找数组重复元素,并打印重复元素、重复次数、重复元素位置

    面试题查找重复元素并打印重复次数和重复位置,一顿懵逼,回来死磕写下来,打印指定重复次数和最大次数,其他在此基础上可以再更新 package sort; import org.testng.annota ...

  10. 关于SQL Server 2012 手动安装帮助文档

    大家以为安装帮助文档很简单,但是其实不然,这其中还有那么一点点道道.今天我就来给大家演示一下! 首先到microsoft官网上下载Microsoft SQL Server 2012 产品文档,然后将. ...