Python 装饰器笔记
【摘要】 装饰器、迭代器、生成器相关知识。
装饰器的作用 -- 不想修改函数的调用方式 但是还想再原来的函数前后添加功能 原则:开放封闭原则 开放:对扩展时开放的 封闭:对修改是封闭的 装饰器的进阶 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)