美文网首页
常见函数归纳(一)

常见函数归纳(一)

作者: 易点梅 | 来源:发表于2019-04-13 11:44 被阅读0次

    1、enumerate():可以把一个序列变成索引-元素对

    enumerate

    2、列表生成式

        list(range(1,11)) -->[1,2,3,4,5,6,7,8,9,10]

        [x * x for x in range(1,11) if x %2 == 0]----->偶数的平方

        [m + n for m in 'ABC' for n in 'XYZ'] --->全排列['AX','AY','AZ','BX','BY','BZ','CX','CY','CZ']

    3、生成器generator:一边循环一边计算的方法,生成器保存的是算法

    (1) 简单的生成器:g = (x * x for x in range(1,11)),使用next(g)可获取一个值,最好是遍历:

            for  num  in  g:

                        print(num)

    (2)使用yield关键字定义的生成器:如果一个函数定义中包含yield关键字,那么这个函数就不是普通函数,而是生成器generator

            def    fib(max):

                    n,a,b = 0,0,1

                    while n < max:

                            yield  b

                            a,b = b,a+b

                    return "done"

    generator和普通函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。普通函数调用直接返回结果,而generator函数的“调用”实际返回一个generator对象。

    遍历yield生成器:

                for    num    in    fib(5):

                            print(num)

    获取generator函数的return返回值:用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:

    获取generator函数的return值

    4、迭代器

    可直接作用于for循环的数据类型有以下几种:

    (1)集合数据类型:list,set,tuple,str,dict

    (2)generator生成器:生成器和带yield的generator function

    这些可以直接作用于for循环的对象称为:可迭代对象Iterable

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

    生成器都是Iterator,但是可迭代对象Iterable却不是Iterator

    把Iterable变成Iterator可以用iter()函数

    为什么list、dict、str等数据类型不是Iterator?

    这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

    Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

    总结

    凡是可作用于for循环的对象都是Iterable类型;

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

    Python的for循环本质上就是通过不断调用next()函数实现的,例如:

    相关文章

      网友评论

          本文标题:常见函数归纳(一)

          本文链接:https://www.haomeiwen.com/subject/naklwqtx.html