一、迭代器(迭代取值的工具)
1、认识iter()方法和next()方法
>>> a
[1, 2, 3, 4, 5, 6]
>>> iter(a) #a具有iter方法,a是可迭代对象
<list_iterator object at 0x00000200BD94AC80>
>>> i = iter(a) #实例化迭代器,使i作为a的迭代器对象
>>> i
<list_iterator object at 0x00000200BD94ACB0>
>>> next(i) #使用迭代器i中的next方法进行迭代取值
1
>>> i
<list_iterator object at 0x00000200BD94ACB0> #i取值不同,但是内存位置不变,这就是迭代
>>> next(i) #使用迭代器i中的next方法进行迭代取值
2
>>> i
<list_iterator object at 0x00000200BD94ACB0>
注意:可迭代对象为元组、字符串、列表、字典、集合、文件;迭代器的实例化就称为迭代器对象
2、可迭代对象(内置iter()方法的对象);迭代器对象(既有iter()方法又有next()方法的对象)
iter()用于实例化迭代器对象,例如使用for循环对可迭代对象进行遍历返回的结果,此时的for循环中就已经封装好了iter()和next()方法。
a = (1231241,'dasda','sda') #定义可迭代对象 print(type(a)) for i in a : #实例化迭代器,使i作为迭代器对象,并使用i对可迭代对象a遍历 print(i)
输出结果:
<class 'tuple'>
1231241
dasda
sda
注意:字典的迭代比较特殊,只遍历键,不遍历值
a = {'mgmtIP': '10.0.0.1', 'user': 'admin', 'password': 'admin'} print(type(a)) for i in a : print(i)
输出结果:
<class 'dict'>
mgmtIP
user
password
二、生成器(使用了yield方法的函数都是生成器)
def range(n): #定义一个名称为range的方法 print('开始代入迭代对象') i = 0 while i < n : print('对比条件语句') yield i #依靠yield来记录每次生成器取值,方便下次调用本次的yield值 print(i) i += 1 print('结束循环') a = range(9) #实例化range方法,n=9 print(a) #输出a print(next(a)) print('-'*20) print(next(a)) print('-'*20) print(next(a)) print('-'*20)
输出结果:
<generator object range at 0x0000016A95E39C40> #a为生成器对象
开始代入迭代对象
对比条件语句
0 #print(next(a))输出的结果
-------------------- #此时代码运行到yield后结束,保存本次的迭代对象值,供下次迭代取值
0 #print(i)输出的结果,也就是上一次记录的迭代值
结束循环
对比条件语句
1 #print(next(a))输出的结果
-------------------- #此时代码在上次yield后继续运行,直到运行到本次yield后结束
1
结束循环
对比条件语句
2
--------------------
进程已结束,退出代码0