一.简单介绍

直接作用于for循环的数据类型有以下几种:

  • 集合数据类型:

    list 例如:list = ["yuhaohao", "lisheng", "huang"]

    tuple 例如:tuple = ("yuhaohao", "lisheng", 18, 29)

    dict 例如:dict = {"yushengyin": 18, "lisheng": 20}

    set 例如:set = set(['yuhaohao', "lisheng"])

    str 例如:str = "yuhaohao"
  • generator

    包括生成器和带yield的generator function

    这些可以直接作用于for循环的对象,统称为可迭代对象

二.可迭代对象的判断

可以使用isinstance()判断一个对象是否是Iterable对象

[root@openstack01 python]# vi instance.py
#!/usr/bin/python
from collections import Iterable
list_1 = ["yuhaohao", "lisheng"]
print isinstance(list_1, Iterable)
[root@openstack01 python]# python instance.py
True

三.生成器的介绍

生成器不但可以作用于for循环,还可以被next()函数不断调用,并返回下一个值,直到最后抛出StopIteration错误,无法继续返回下一个值了。可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

  • 迭代器的判断

    可以使用isinstance()判断一个对象是否是Iterator对象
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False
>>>

生成器都是Iterable对象,但是list,dict,str虽然是Iterable,却不是Iterator

四.Iterable转化Iterator方法

把list,dict,str等Iterable变成Iterator可以使用iter()函数

>>> from collections import Iterator
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
  • 为什么list,dict,str等数据类型不是Iterator?
因为python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列。但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据。所以Iterator的计算是惰性的,只有在需要返回下一个数据时,它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数,而用list是永远不可能存储全体自然数的

python中的for循环本质上就是不断调用next()函数实现的,例如:

for x in [1, 2, 3, 4, 5]:
print x
pass

等价于

ite = iter(['yushengyin', 'lijing', 'yuhaohao'])
while True:
try:
x = next(ite)
print x
except StopIteration:
break

Python编程高级特性--迭代器的更多相关文章

  1. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  2. Python的高级特性7:闭包和装饰器

    本节跟第三节关系密切,最好放在一起来看:python的高级特性3:神奇的__call__与返回函数 一.闭包:闭包不好解释,只能先看下面这个例子: In [23]: def outer(part1): ...

  3. Python的高级特性8:你真的了解类,对象,实例,方法吗

    Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...

  4. Python的高级特性(切片,迭代,生成器,迭代器)

    掌握了python的数据类型,语句和函数,基本上就可以编出很多有用的程序了. 但是在python中,并不是代码越多越好,代码不是越复杂越好,而是越简单越好. 基于这个思想,就引申出python的一些高 ...

  5. Python面向对象编程高级特性

    ***这里还是根据网上资料,主要是廖雪峰老师的教程学习的笔记,主要介绍python面向对象的高级特性,笔记不全,只是记录自己觉得容易出错的地方*** 1.python作为一种动态语言,他的动态绑定机制 ...

  6. Python高级特性——迭代器

    可以直接用for循环的数据类型有: 集合数据类型,如:list.tuple.dict.set.str等: 生成器generator,包括生成器和带yield的generator function. 以 ...

  7. Learning Python 011 高级特性 2

    Python 高级特性 2 列表生成式 列表生成式就是指类似这样的代码:[x for x in range(1, 11)] >>> L = [x for x in range(1, ...

  8. python函数高级特性

    掌握了Python的数据类型.语句.函数,基本可以编写出很多有用的程序了.但是Python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.基于这一思想,我们来介绍python中 ...

  9. Learning Python 011 高级特性 1

    Python 高级特性 1 切片 将L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']列表中前上个3个元素: L = ['Michael', 'Sarah ...

随机推荐

  1. keepalived weight正负值问题(实现主服务器nginx故障后迅速切换到备服务器)

    有两台负载均衡,lb01,lb02.  lb02, priority值为100 编辑keepalived配置文件   vim /etc/keepalived/keepalived.conf ! Con ...

  2. Linux VNC server 安装配置

    1.安装vnc server [root@pxe ~]# yum install tigervnc-server -y   2.设置 vnc server 开机启动 [root@pxe ~]# chk ...

  3. Jquery回到顶部效果

    <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...

  4. hisicv200 exfat支持

    由于项目中需要128Gsd卡支持.所以内核里面需要支持exfat 1.exfat 由于版权问题,所以linux kernel一直都没法支持,由于某些公司在linux kernel 3.9版本开源exf ...

  5. 如何利用cURL和python对服务端和web端进行接口测试

    工具描述 cURL是利用URL语法在命令行方式下工作的文件传输工具,是开源爱好者编写维护的免费工具,支持包括Windows.Linux.Mac等数十个操作系统,最新版本为7.27.0,但是我推荐大家使 ...

  6. Docker bridge-utils 工具简单部署

    bridge-utils 网桥查看工具 # 1.安装 查看桥接工具 yum install -y bridge-utils # 2.查看桥接 命令brctl show bridge name brid ...

  7. git 分支命名规范

    为规范开发,保持代码提交记录以及 git 分支结构清晰,方便后续维护,现规范 git 的相关操作. 主要规范两点: git 分支命名规范 git 提交记录规范 1. git 分支命名规范 git 分支 ...

  8. dataguard从库删除归档的例子

    deletearchlog.sh #!/bin/sh export PATH TABLE='v$archived_log' sqlplus -silent "/ as sysdba" ...

  9. springboot配置cxf

    1.引入两个需要的jar <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf- ...

  10. css的再深入8(更新中···)

    1.去滚动条的属性 overflow:hidden; overflow-x:hidden; 水平超出的隐藏. 2.z-index 层次叠加 元素重叠 谁的值大谁在上面 (1) 父级出现position ...