Python3 学习笔记18_高级特性(迭代器)_20180308

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 学习网站:www.liaoxuefeng.com

#****************************************************
#                   Python3 高级特性-迭代器         *
#****************************************************
print ("--------------------分割线------------------")

#============
# 迭代器
#============
'''
可迭代对象(Iterable):可以直接作用于for循环的对象
一类是集合数据类型,如list, tuple, dict, set, str等
一类是generator,包括生成器和带yield的generator function
可以使用isinstance()判断一个对象是否是Iterable对象
'''
from collections import Iterable
print( isinstance([], Iterable) )           # True
print( isinstance({}, Iterable) )           # True
print( isinstance((), Iterable) )           # True
print( isinstance((x for x in range(10)), Iterable) )   # True
print( isinstance(100, Iterable) )          # False
print ("--------------------分割线------------------")
'''
迭代器(Iterator):可以被next()函数调用并不断返回下一个值的对象
可以使用isinstance()判断一个对象是否是Iterator对象
'''
from collections import Iterator
print( isinstance([], Iterator) )           # False
print( isinstance((), Iterator) )           # False
print( isinstance({}, Iterator) )           # False
print( isinstance('str', Iterator) )        # False
print( isinstance(100, Iterator) )          # False

# 列表生成式
print( isinstance([x for x in range(5)], Iterator) )    # False
# 生成器
print( isinstance((x for x in range(5)), Iterator) )    # True
print ("--------------------分割线------------------")
'''
生成器都是Iterator对象,但list,dict,str虽然是Iterable,却不是Iterator
可使用iter()函数把list,dict,str等Iterable变成Iterator
'''
print( isinstance( iter([]), Iterator ) )   # True
print( isinstance( iter(()), Iterator ) )   # True
print( isinstance( iter({}), Iterator ) )   # True
print( isinstance( iter('str'), Iterator ) )# True

'''
为什么list,dict,str等数据类型不是Iterator???
因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()
函数调用并不断返回下一个数据,知道没有数据时抛出StopIteration错误。
可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度
只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是
惰性的,只有在需要返回下一个数据时它才会计算。

Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是
永远不可能存储全体自然数的。
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值