Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152189
  • 博文数量: 130
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1302
  • 用 户 组: 普通用户
  • 注册时间: 2018-11-15 23:50
个人简介

.。。。。。。。

文章分类

全部博文(130)

文章存档

2022年(12)

2018年(118)

我的朋友

分类: Python/Ruby

2018-11-16 23:11:08

可迭代对象

容器:container

可迭代对象:iterable

迭代器:iterator

生成器:generator


字符串,列表,元组,集合,字典

容器

容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个的迭代获取

特点:可以通过 in /not in 成员关系操作符 检测元素是否在容器之内

常见的容器类型:

list,strtuplesetdictfrozenset

成员关系(in/not in) 并不是容器本身的性质---迭代对象

>>> d={'one':1,'two':2}

>>> type(d)

>>> 'one' in d

True

>>> 1 in d

False

>>> 1 in d.values()

True

可迭代对象

很多容器都是可迭代对象

拥有迭代器的对象则为可迭代对象

>>> l=[1,2,3]

>>> iter(l)   #获取迭代器

>>> a=iter(l)

>>> a

>>> for i in a:

print(i)


1

2

3

迭代器

例子引入迭代器:

>>> l=[1,2,3]

>>> a=iter(l)

>>> next(a)

1

>>> next(a)

2

>>> next(a)

3

>>> next(a)

StopIteration

>>> next(l)

TypeError: 'list' object is not an iterator

iterator

是一个带状对象,它能在调用next()的时候返回容器的下一个值


任何实现了__iter__()  __next__() 的对象都是迭代器


iter()---  __iter__()

next()---  __next__()


>>> l=[1,2,3]

>>> a=l.__iter__()

>>> a.__next__()

1

>>> a.__next__()

2

>>> a.__next__()

3

>>> a.__next__()

StopIteration

python中for循环可以捕获异常:

>>> for i in l:

print(i)


1

2

3










生成器

generator

是一种特殊的迭代器(生成器一定是迭代器)

不需要实现__iter__() __next__()

可以使用next()函数进行调用

创建:

1. yield

def fib():

a,b=0,1

while True:

yield b  # 有yiled的函数是生成器

a,b=b,a+b

a=fib()
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))

2. 生成器表达式(生成式)

l=(i for i in range(10))  #生成器

小结:

1. 容器:是一系列元素的集合体:strlistsetdicttuple… 可以使用in/not in 查看是否存在

2. 可迭代对象:拥有迭代器的对象则为可迭代对象:调用__iter__() 可以返回一个迭代器---不一定可以使用next()

3. 迭代器:实现了__iter__()__next__() 方法的对象则为迭代器

4. 生成器:特殊的迭代器--1.yield关键字 2. 生成器表达式


阅读(262) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~