生成器、迭代器

廖大博客学习笔记

最近见天一直在看廖大的Python教程,却发现很多基础看着很简单,但却不会应用,归根结底还是因为理解不到位,故而又将教程学了一遍,并将自己的理解记录一下,也方便后面查阅。由于没有相关编程基础,有些理解可能是错的,敬请批评指正。

想深入具体学习廖大博客请移步廖雪峰的官方网站

列表生成式

有时候用循环生成列表太过繁琐,就可用列表生成式代替。

L = [ x for x in range(1, 4)]    #此时与应用循环区别不大

>>> L = [1, 2, 3]

L = [x*y for x in range(1, 4) for y in range(1, 4)]    #一行代码即可实现双重循环

>>> L = [1, 2, 3, 2, 4, 6, 3, 6, 9]

L = [x*y for x in range(1, 4) for y in range(1, 4) if x*y % 2 != 0]    # 也可加条件 

>>> L = [1, 3, 3, 9]


生成器

通过列表生成式可以创建一个列表,但受内存限制,此种方法创建的列表长度有限,且一次性生成整个列表也是不划算的,因为列表内后面的数据短时间内可能用不到。那有没有方法可以实现动态生成数据呢,即需要使用时再生成数据,不使用之前不生成。

在Python中,这种边循环边计算的机制,称为生成器,即generator。

创建生成器的方法:

  1.  将列表生成式的[]改为()即可。例:g = (x*x for x in range(1, 10)),即是一个生成器。可通过next(g)函数逐个生成数据。每调用一次next(g)即可生成一个数据:1,4,9……。也可利用for循环生成数据:for n in g: print(n)
  2. 使用yield关键字,当函数中出现yield关键字后,该函数就不再是普通函数,而是一个生成器。普通函数按顺序执行,遇到return或最后一行就返回,下次调用再从头开始重复执行;生成器遇到yield关键字即返回数据,下次调用继续执行yield后面的程序。

例:def odd():

                print ('step 1')

                yield 1

                print ('step 2')

                yield 3

                print ('step 3')

                yield 5

调用该生成器时,先生成一个generator对象,然后用next()不断获得返回值

    >>> g = odd()

    >>> next(g)

            step 1

            1

    >>>next(g)

            step 2

            3


迭代器

可以被next()函数调用并不断返回下一个值的对象称为迭代器。

generator都是迭代器。可使用isinstance([], Itarator)来判断一个对象是否是迭代器。

list、dict、str等都不是迭代器,可用iter()将其转换为迭代器,iter(list)。

迭代器表示一个数据流,可被看作一个未知长度的有序序列,只有当需要返回下一个数值时才计算。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值