您当前的位置:首页 > 计算机 > 网络通信

Python迭代器与生成器

时间:09-07来源:作者:点击数:

一、迭代器(迭代取值的工具)

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

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门