Python迭代器与生成器

本文介绍了Python中的迭代器和生成器。通过示例展示了如何使用iter()和next()方法操作迭代器,以及如何创建和使用生成器。在可迭代对象如列表、元组、字典等中,迭代器用于遍历元素。生成器则是一种更高效的数据生成方式,利用yield关键字在运行时生成值,节省内存。
摘要由CSDN通过智能技术生成

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

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
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值