Python 装饰器笔记

举报
Yuchuan 发表于 2020/02/10 22:36:27 2020/02/10
【摘要】 装饰器、迭代器、生成器相关知识。
装饰器的作用 -- 不想修改函数的调用方式 但是还想再原来的函数前后添加功能
原则:开放封闭原则
    开放:对扩展时开放的
    封闭:对修改是封闭的
    
装饰器的进阶
    functools.wraps
    带参数的装饰器
    多个装饰器同一个函数
装饰器的本质:闭包函数

迭代器的概念
迭代器协议  --  内部含有 __next__ 和 __iter__ 方法的就是迭代器

迭代器协议和可迭代协议
可以被for循环的都是可迭代的
可迭代的内部都有 __iter__ 方法
只要是迭代器一定可迭代
可迭代的.__iter() 方法就可以得到一个迭代器
迭代器中的__next__ 方法可以一个一个的获取值

for 循环其实就是在使用迭代器
iterator
可迭代对象
直接给你内存地址
只有是可迭代对象的时候才能for
当我们遇到一个新的变量,不确定能不能for循环的时候,就判断它是否可迭代

    
迭代器:
    双下方法:很少直接调用的方法。一般情况下,是通过其他语法触发的
    可迭代的 -- 迭代协议 含有 __iter__ 的方法('__iter__' in dir(数据))
    迭代器协议 —— 含有next和iter的都是迭代器
    可迭代的一定可以被for循环
    迭代器一定可迭代,可迭代的通过调用iter() 方法就能得到一个迭代器
    迭代器的特点:
    从容器类型中一个一个的取值,会把所有的值都取到。
    节省内存空间
        迭代器并不会在内存中再占用一大块内存,
        而是随着循环每次生成一个,
        每次next每次给我一个
    很方便使用,且只能取所有的数据取一次

生成器函数:
    只要含有yield关键字的函数都是生成器函数
    yield不能和return共用且需要写在函数内
    执行之后得到一个生成器作为返回值
    特点:
        调用函数的之后函数不执行,返回一个生成器
        每次调用next方法的时候取道一个值
        直到取完最后一个,在执行next会报错
        每从生成器中取一个值就会执行一段代码,遇见yield就停止。
        如何从生成器中取值:
                 for :如果没有break会一直取直到取完
                 next :每次只取一个
                 send :不能用在第一个,取下一个值的时候给上个位置传一个新的值
                 数据类型强制转换 :会一次性把所有数据都读到内存里
    
生成器:
    生成器的本质就是迭代器
    生成器的表现形式
        生成器函数
        生成器表达式
        
生成器表达式
        (条件成立想放在生成器中的值 for i in 可迭代的 if 条件)
        
列表推导式:
    [每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型]    遍历之后挨个处理
    [满足条件元素的相关操作 for 元素 in 可迭代数据类型 if 元素相关的条件]    筛选功能


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。