python之迭代器

1. 可迭代对象是什么?

字面意思:可以重复迭代的工具。

专业角度: 内部含有'__iter__'并且含有"__next__"方法的对象,就是迭代器

2. 可迭代对象如何转化成迭代器

li = [1, 2, 3, 4, 5
obj = iter(li) # 转换方法 # iter是一个内置函数
print(obj)

# 输出结果
<list_iterator object at 0x10fa7d4a8> # 这个就是一个迭代器

3. 迭代器可以利用next()进行迭代取值

li = [1, 2, 3, 4, 5]
obj = iter(li)
print(obj)
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj)) # 每执行一次print(next(obj)) 就取一个值,取到最后再去取值的时候取不到了就会报错

4. 迭代器的优缺点和特性

迭代器优点:
  1. 非常节省内存。
  2. 惰性机制。
迭代器缺点:
  1. 不直观。
  2. 操作不灵活。
  3. 效率相对低。
特性:

next执行会停止在最后执行的值的后面,下次执行会继续往后取值

l1 = [22, 33, 44, 55, 66, 77]
obj = iter(l1)

for i in range(3):
    print(next(obj))

# 输出结果
22
33
44

for i in range(2):
    print(next(obj))
# 输出结果
55	# 上次执行完毕后,就停止在上次那个位置后面,再次执行继续往下走
66

5.利用while循环,模拟for循环内部循环可迭代对象的机制

li = [1, 2, 3, 4, 5]
# 1,先要将一个可迭代对象转换成一个迭代器
obj = iter(li)
while 1:
	try: # 2,然后使用调试模式
		print(next(obj)) # 3,接着使用netx开始一个一个取值
	except StopIteration: # 4,因为迭代器的特性,取值完毕后取不到会报错,所以如果遇到该StopIteration报错就退出循环
		break

# 输出结果
1
2
3
4
5

利用while循环,模拟for循环内部循环可迭代对象的机制。

  1. 先要将可迭代对象转化成迭代器。
  2. 利用next对迭代器进行取值。
  3. 利用异常处理try一下防止报错。

6. 可迭代对象与迭代器的对比

可迭代对象:

​ 可迭代对象是一个操作比较灵活,直观,效率相对高,但是比较占用内存的数据集。

迭代器:

​ 迭代器是一个非常节省内存,满足惰性机制,但是效率相对低,操作不灵活的数据集。

posted @ 2019-06-19 21:03  爱咋闹  阅读(379)  评论(0编辑  收藏  举报