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)