首页 > 其他 > 详细

迭代器

时间:2020-03-30 12:15:04      阅读:55      评论:0      收藏:0      [点我收藏+]

一.

1.迭代器

  1.迭代更新的过程 ,重复的过程

  2.每次迭代都是基于上一次的结果

2.作用:

  提供了一种不需要索引去取值的方式

迭代器:

# l = [1,2,3,4,5]
# n = 0
# while n < len(l):
#     print(l[n])
#     n += 1

二.可迭代对象

  内置有__iter__方法叫做可迭代器

    可迭代的数据类型有:str list tuple set dict 文件

三.迭代器对象

  1.内置__iter__和__next__的方法叫做迭代器对象

  2.迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象 

    比如 :文件:既是可迭代对象也是迭代器对象

      list 是可迭代对象,不是迭代器对象

  3.迭代器对象不管__iter__多少次,结果还是还是它本身

 

四.迭代器的取值

  1.把可迭代对象通过___iter__生成可迭代器对象

  2.然后通过__next__取值

# l = [1,2,3,4]
# iter_l = l.__iter__()  # 先生成可迭代对象
# print(iter_l.__next__()

  3.报错:当迭代器取值去玩之后,在往下取值就会报错 StopIteration

  4.报错处理: 时刻监视迭代取值,以报错就退出取值

l = [1,2,3,4]
iter_l = l.__iter__()
while True:
    try:
        print(iter_l.__next__())
    except StopIteration:
        break

  5.取值的优点:

    1.不用索引取值

    2.只占一份内存,不会导致内存溢出

   缺点:

    1.不能去除指定的元素

    2.取完值报错

  取值的特点:

    1.只能从前往后,不能后退

五.

  for循环的本质

    1.for循环后面的in为可迭代对象,用__iter__生成迭代器对象

    2.迭代器对象调用__next__取值

    3.报错处理,当__next__报StopIteration的错,循环结束

d = {name:jason,password:123}
for i in d:  # in后面跟的是可迭代对象
    print(i)

六.生成器
  

def func():
    print(hello)
    yield 111
    print(world)
    yield 123
func()
g = func()  # 生成器初始化:将该函数变成迭代器
print(g)
print(g.__next__())
print(func().__next__())

  函数内有yield关键字,那么函数加括号不能执行函数体代码,而是生成了生成器,调用__next__才能执行代码

  1.返回值 可以多次返回值.暂停程序. 帮你提供一种自定义生成器方式

  2.yield可以接受外部传参

def dog(name):
    print(%s准备开吃%name)
    while True:
        food = yield
        print(%s吃了%s%(name,food))

g = dog(tom)
g.__next__()

g.send(饺子)
g.send(mouth)

七.生成器表达式:

  生成器不会主动执行代码

  必须通过__next__才能执行代码

# res = [i for i in range(1,100000) if i != 4]
# res = res.__iter__()
# print(res.__next__())

 面试题

  

def multipliers():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in multipliers()])
# [6, 6, 6, 6]

迭代器

原文:https://www.cnblogs.com/zhuangshenhao/p/11191033.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!