设为首页 加入收藏

TOP

Python入门教程之迭代器和生成器
2018-10-10 04:11:50 】 浏览:141
Tags:Python 入门教程 成器

 


flag=True
l=[x for x in range(1,101)]


 


l_iter = l.__iter__()
while flag:
    try:
      item=l_iter.__next__()
      if item==51:
          flag=False
          break
      else:
          print(item)


 


    except:
        break


在While循环中迭代器将一直循环执行__next__()函数,但迭代器本身并不知道它要迭代多少个元素。当执行到最后元素时,还会继续执行__next__()函数,但此时没有元素可被迭代了,由于迭代器找不到可被迭代元素,将会报错。因此我们在使用while循环时,配合异常捕获代码 try except一起使用,当迭代过程中出现异常,将会自动停止下一次循环。


假设我们 有个需求,除第一个 和第二个元素外,其他元素依次为前两个元素之和。


我们可以这样写


def fib1(max):
    n,a,b=0,0,1
    while n<max:
        print(b)
        a,b=b,a+b
        n=n+1
    return 'done'


a=fib1(5)
print(a)


输出结果


1
1
2
3
5
done


推导过程如图



用另外一种方法


def fib2(max):
    n,a,b=0,0,1
    while n<max:
        yield b
        a,b=b,a+b
        n=n+1
    return 'done'


调用该函数


1 a=fib2(5)
2 print(a)


输出结果 1 <generator object fib at 0x0000000002800518>


此时我们发现,不能像之前那样直接显示结果,此时定义的fib并不是一个简单的函数,而是被改造成了生成器。如果想知道生成的结果可以依次执行__next__函数,但每次只返回一个结果,当没有更多的元素可以被迭代时将会抛出异常。


另外我们也可以使用for 循环和while(需配合try  except使用)打印结果。


1 a=fib2(5)
2 for c in a:
3    print(c)


显示输出结果 1 1 2 3 5.


使用生成器的好处:生成器是根据推导的过程计算下一个元素。再看前两个函数 fib1 和fib2 ,fib1在计算机中开辟一个固定的内存空间用于存储完整的计算结果,但如果我们想访问计算结果中的某一个元素,就需要先遍历整个计算结果,才能通过对象下标或者用for 循环和if条件判断 拿到我们想要的结果,这样做的可以实现我们的需求,但将会耗损较多的内存空间。而fib2则是依据推算过程计算出下一个元素,因此我们就可以在未创建完整对象之前获取我们想要的元素。从而降低内存消耗。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python入门教程之字符串常用方法.. 下一篇Python入门教程之高级特性

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目