python6_3 迭代器,生成器相关

Posted cooky

tags:

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

迭代器:不依赖索引的迭代取值方式 

可迭代对象:内置有__iter__方法对象

迭代器对象:执行可迭代对象__iter__()方法得到的返回值

      迭代器对象内置有__next__()方法和__iter()方法

有索引的数据类型:字符串,列表,元祖

没有索引:字典,集合,文件

技术分享图片
dic = {k1: v1, k2: v2}

dic_iter = dic.__iter__()

print(dic_iter.__next__())
View Code

 for循环的底层运行机制:

  1. 先调用in后那个对象的__iter__方法
  2. 执行迭代器对象的__next__方法,将得到的值赋值in前的变量名
  3. 循环往复

 迭代器的优缺点:

优点:

1.不依赖于索引取值

2.节省内存

缺点:

1.只能取一次值,除非重新得到新的迭代器对象

-----------------------------------------------------------------------------------------------------------------

生成器:自定义迭代器的方式。在函数内有yield关键字,得到一个返回值为生成器对象。

技术分享图片
def f1():
    print(first)
    yield 1
    print(second)
    yield 2
    print(third)
    yield

g=f1()
result=g.__next__()
print(result)
View Code

模拟一个range函数

def my_range(x, y, step=1):
while x < y:
yield x
x += step
else:
print(‘exception‘)


for item in my_range(1, 10, 2):
print(item)

总结yield:

1.自定义迭代器的方式

2.和return,都有返回值,return只能返回一次

 

生成器表达式:节省内存

代码1:

l1 = [a, b, c, d]
l2 = (i for i in l1 if i != a)

print(next(l2))

代码2:获取文件中最长一行的字符数

with open(a3.log, mode=rt, encoding=utf-8) as f:
    print(max(len(i) for i in f))

 










以上是关于python6_3 迭代器,生成器相关的主要内容,如果未能解决你的问题,请参考以下文章

迭代器可迭代对象迭代器对象生成器生成器表达式和相关的面试题

内置函数

内置函数

迭代器与生成器,及生成器进阶和相关表达式

python编程系列---可迭代对象,迭代器和生成器详解

迭代器和生成器