# 0.本集概览

1. 可迭代对象、迭代器、迭代协议究竟是什么
2. 迭代过程手动演示
3. 典型可迭代对象举例：文件、字典以及range、enumerate返回值
4. 使用迭代协议的逐项扫描工具可以称之为迭代环境
5. 迭代环境还包含很多可以传入可迭代对象的内置方法

# 1.可迭代对象

Python中有一类工具叫做迭代工具，他们能从左至右扫描对象。这包括了for循环、列表解析、in成员关系测试以及map内置函数等。而可迭代对象，顾名思义就是可以用在上述迭代工具环境中，通过一次次迭代不断产生结果的对象

# 2.迭代器

## 2.1.迭代器与可迭代对象的关系

L = [2,3,4]
I = iter(L)
print(iter(L))
print(I is L)
print(I is iter(I))

<list_iterator object at 0x00000000021E0978>
False
True

## 2.2.迭代过程演示

### 2.2.1.手动演示迭代协议

L = [2,3,4]
I = iter(L)
print(next(I))
print(next(I))
print(next(I))
print(next(I))

2
3
4
Traceback (most recent call last):
File "E:/12homework/12homework.py", line 6, in <module>
print(next(I))
StopIteration

L = [2,3,4]
for x in L:
print(x)

2
3
4

# 2.3.典型对象迭代举例

### 2.3.1.迭代文件对象

open函数返回的已打开的文件对象，也是可以一行一行的读取，直至文件结束，那很显然，他也是可迭代对象。代码片段：

f = open('myfile.txt')
print(f is iter(f))

True

f = open('myfile.txt')
print(next(f))
print(next(f))
print(next(f))
print(next(f))

hello text file
goodbyt text file
hahahahah
Traceback (most recent call last):
File "E:/12homework/12homework.py", line 5, in <module>
print(next(f))
StopIteration

f = open('myfile.txt')
for line in f:
print(line, end='')

hello text file
goodbyt text file
Hahahahah

f = open('myfile.txt')
print(line, end='')

hello text file
goodbyt text file
Hahahahah

### 2.3.2.迭代字典对象

D = {'a':1, 'b':2, 'c':3}
I = iter(D)
print(next(I))
print(next(I))
print(next(I))
print(next(I))

a
b
c
Traceback (most recent call last):
File "E:/12homework/12homework.py", line 6, in <module>
print(next(I))
StopIteration

D = {'a':1, 'b':2, 'c':3}
for k in D:
print(k)

c
a
b

D = {'a':1,'b':2,'c':3}
print(D.keys())
print(iter(D.keys()))
print(D.values())
print(iter(D.values()))
print(D.items())
print(iter(D.items()))

dict_keys(['b', 'a', 'c'])
<dict_keyiterator object at 0x0000000002202958>
dict_values([2, 1, 3])
<dict_valueiterator object at 0x0000000002202958>
dict_items([('b', 2), ('a', 1), ('c', 3)])
<dict_itemiterator object at 0x00000000022029A8>

### 2.3.3.迭代range函数返回对象

range函数的返回值是一个可迭代对象，同理利用iter方法也可以得到他的迭代器 代码片段：

R = range(5)
I = iter(R)
print(R)
print(I)

range(0, 5)
<range_iterator object at 0x0000000002191A30>

### 2.3.4.迭代enumerate函数返回对象

enumerate方法返回的也是可迭代对象，他的迭代器就是他自身 代码片段：

E = enumerate('spam')
print(E)
print(iter(E))

<enumerate object at 0x00000000021F2558>
<enumerate object at 0x00000000021F2558>

print(list(enumerate('spam')))

[(0, 's'), (1, 'p'), (2, 'a'), (3, 'm')]

338 篇文章129 人订阅

0 条评论

## 相关文章

2325

902

### 01 - JavaSE之基础及面向对象

byte(-128 ~ 127) short(-32768 ~ 32767) int(-2147483648 ~ 2147483647)

1734

### JAVA反射机制作用是什么

Java的反射机制是Java特性之一，反射机制是构建框架技术的基础所在。灵活掌握Java反射机制，对大家以后学习框架技术有很大的帮助。

1.4K2

### Java中正则表达式分类及使用方法，分门别类，总结的很好

1、正则表达式是什么？ 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。 作用 : 比如注册邮箱 , 邮...

1955

1813

761

453

### python operator模块学习

operator模块是python中内置的操作符函数接口，它定义了一些算术和比较内置操作的函数。operator模块是用c实现的，所以执行速度比python代码...

822

3999