python函数五(迭代器,生成器)

Posted 忆殇★伤忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数五(迭代器,生成器)相关的知识,希望对你有一定的参考价值。

一。迭代器

1.可迭代对象(只含有__iter__方法的数据是可迭代对象)

常见的可迭代对象:str list tuple dict set range

1.1什么是可迭代对象?

方法一: dir(被测对象) 如果 他含有‘__iter__ ‘,那这个对象就叫做可迭代对象.
遵循可迭代协议

s = alex
l = [1,2,3,4,5]
print(__iter__ in dir(s))
print(__iter__ in dir(l))
# 输出结果:
# True
# True

2.迭代器(含有__iter__方法,并且含有__next__方法的数据是迭代器)

常见的迭代器:文件句柄

2.1迭代器的取值

s = alex
l = [1,2,3,4,5]
s1 = s.__iter__()
print(s1.__next__())
print(s1.__next__())
print(s1.__next__())
# 输出结果: a   l   e

2.2迭代器的意义:
1)迭代器节省内存.
2)迭代器惰性机制.
3)迭代器不能反复,一直向下执行.

for循环的机制就是完美的运用的迭代器
内部含有__iter__方法,他会将可迭代对象先转化成迭代器。然后在调用__next__方法,他有异常处理的方法.

3.可迭代对象与迭代器的关系

1)可迭代对象------>迭代器
可迭代对象.__iter__()------->迭代器

s = alex
l = [1,2,3,4,5]
l1 = l.__iter__()     #迭代器
print(l1)   #iterator  遵循迭代器协议
# 输出结果:<list_iterator object at 0x00000156B0EC7630>

判断是可迭代对象还是迭代器

方法二(isinstance与type类似,但是功能比type更强大

l = [1,2,3,4,5]
l_iter = l.__iter__()
from collections import Iterable
from collections import Iterator
print(isinstance(l,Iterable))               #True
print(isinstance(l,Iterator))               #True
print(isinstance(l_iter,Iterator))        #False
print(isinstance(l,list))                      #True

二。生成器

生成器的本质就是迭代器,生成器是自己用python代码写的迭代器.
1,可以用生成器函数
2,可以用各种推导式构建迭代器.
3,可以通过数据转化.

def gener():
    print(111)
    yield 222
    count = yield 333
    print(count)
    yield 444
    yield 555
g = gener()
print(g)
print(g.__next__())
print(g.__next__())
print(g.send(aaa))
print(g.__next__())
# 输出结果:
# <generator object gener at 0x0000014CDE5B1BF8>
# 111
# 222
# 333
# aaa
# 444
# 555

4.send
1)send 和next功能一样
2)给上一个yiled 整体发送一个值
send不能给最后一个yield发送值
获取第一个值的时候,不能用send 只能用next

 

 

 

    

 














以上是关于python函数五(迭代器,生成器)的主要内容,如果未能解决你的问题,请参考以下文章

Python 全栈开发五 迭代器 生成器 装饰器

五. python进阶(迭代器)

五 迭代器生成器

Python概念之装饰器迭代器生成器

python之装饰器生成器迭代器

五年级--python函数高级运用