python脱产4期内容整理NO.13

今天讲的内容有

一、叠加多个装饰器
二、迭代器
三、自定义迭代器
四、xxx生成式

一、叠加多个装饰器

            当一个被装饰的对象同时叠加多个装饰器时
            被装饰的加载顺序是:至下而上
            装饰器内wrapper函数的执行顺序是:至上而下

二、迭代器

           1.什么叫做迭代器
              迭代指的是一个重复的过程,每一次重复都是基于上一次的结果而来的,迭代器是取值的              的工具,除去索引取值之外比较通用的一种取值方式,。

           2.为何要用迭代器
              对索引取值的一种补充,可以不依赖于索引的取值方式

           3.如何用迭代器
             可迭代的对象:当中自带__iter__内置功能的类型
             迭代器的对象:即自带__iter__又带__next__内置功能的类型

             可迭代对象:str、list、tuple、dict、set、文件
             迭代器对象:文件对象
              

               

           4.总结迭代器的优缺点:

              优点:通用的一种取值方式,可以不通过依赖索引的取值方式
                         同一时刻在内存中只有一个值,更加节省内存
                         

              缺点:取值时不如索引取值灵活
                         无法预知迭代器数据的个数

            如何实现可迭代到迭代器的转换:
                    1.调用可迭代对象的__iter__会得到一个迭代器对象
                    2.调用迭代器对象的__iter__会得到一个迭代器本身
                     迭代器对象:调用可迭代对象内置的__iter__方法会有一个返回值,该返回值就是对                         应的迭代器对象

           5.for准确来说应该是迭代器循环,for循环原理如下:

                 1.先调用in后面的那个值的__iter__方法,得到迭代器对象
                 2.执行迭代器__next__()方法得到一个返回值,然后赋值给一变量K,运行循环体代码
                 3.循环往复,知道迭代器取值完毕抛出异常然后捕捉异常自动结束循环

三、自定义迭代器

           1.yleid关键字:
              #只能在函数内,但凡包含关键字yleid,再去执行函数,就不会立刻运行函数体代码了,
              #会得到一个返回值,该返回值成了生成器对象,生成器本质就是迭代器

           2.yleid关键字总结:
               1.yleid可用于返回值
               2.yield vs return

                相同点:返回函数的一个值
                不同点:return返回值一次就终止,而yield返回值多次

          

四、xxx生成式

         1.三元表达式:

           x=10
           y=20
           res='条件成立值’ if x>y else ‘条件不成立值’
           print(res)

         2.列表生成式:

            l=['egg%s' %i for i in raage(1,11) if i>4]
            print(i)

         3.生成器表达式:
            res=(i**2 for i in range(3))
            print(res)
            print(next(res))
            print(next(res))
            print(next(res))
            print(next(res))

            

         4.字典生成式
                items=[('name','egon'),('age',18),('sex','male')]
                res={k:v for k,v in items if k!='sex'}

猜你喜欢

转载自www.cnblogs.com/wuzhengzheng/p/9720972.html
今日推荐