迭代器协议、可迭代对象(迭代器)、三元表达式、生成器

今天说的这老几位可是老牛逼了,认真看,咱们挨个介绍哈。

1、迭代器协议
(1)有一个next()方法
(2)只能往后走不能往前退

2、可迭代对象
可迭代对象又叫做迭代器,什么是可迭代对象呢?
很简单,满足迭代器协议的对象就是可迭代对象。
说白了,就是满足前面那两条:有一个next()方法,只能往后走不能往前退。

--注意:for循环就是进行迭代,比如:

li = [1,2,3,4,5}
for i in li:
    print(i)

上面这个例子其实就是利用for循环来实现对li列表的遍历,那么列表li就是迭代器吗?
很抱歉,不仅列表不是,元组、字符串、字典、集合通通不是迭代器。
那么问题来了,那怎么能够被for循环进行遍历呢?
因为它们自身有一个__inte__()方法,调用这个方法以后就是一个迭代器了。
res = li.iter() -- res此时就是一个迭代器,不信打印一下res看看
print(res) 输出:<list_iterator object at 0x000001ECE05C8358> 意思获取的是一个可迭代对象的内存地址
print(res.next()) -- 注意,迭代器一次只能拿出一个值。

3、三元表达式
这个就有点意思了,其实作用就是减少代码量。直接看例子吧!

for i in range(5):
       if i < 3:
           print(i)

改写三元表达式(这里的做法是列表解析):

[i for i in range(5) if i < 3]
注意:i是一元、for i in range(5)是一元、if i < 3是一元,故为三元。

4、生成器
所谓生成器,其实就是一个迭代器(可迭代对象),说白了就是直接就有一个next()方法。
生成器咋玩的?其实就是一个就是把列表解析的[]换成小括号。废话不多说,直接来个例子吧。

res = (i for i in range(5)) -- 这就是传说中的生成器表达式
print(res)
输出:<generator object <genexpr> at 0x0000019698E1FE08>  --这就是一个生成器对象
res.__next()__
或
next(res)
一次拿出一个值。
posted @ 2024-07-03 10:05  疯狂Python  阅读(2)  评论(0编辑  收藏  举报