叠加装饰器:
在同一个被装饰对象中,添加多个装饰器,并执行
@装饰1
@装饰2
@装饰3
def 被装饰对象():
pass
注意:装饰器在调用被装饰对象是才会添加的功能
叠加装饰器:
-- 装饰器的顺序:由下到上
--执行的顺序:由下到上
注意:无论inner中出现任何判断,最后都要返回“调用后的被装饰对象” func(*args, **kwargs)
有参装饰器:
本质上是在无参装饰器上套了一个外层函数
无参装饰器可以引用外层函数的名字
应用:
用户权限的认证
迭代器
迭代器:
迭代取值的工具
迭代:
迭代指的是重复迭代,每一次迭代都是基于上一次的结果而产生
迭代器:
迭代器指的是迭代取值的工具,它可以迭代取值
- 如果想要知道python中迭代器是什么,首先需要先知道什么是可迭代对象?
可迭代对象:
所有的序列类型:str(字符串)、list(列表)、tuple(元祖)、dict(字典)、set(集合)、f(文件)
凡是内部有 __ iter__ () 方法的都是可迭代对象
可迭代对象:
通过可迭代对象 __ iter __ (),得到的返回值就是“迭代器对象”
迭代器是迭代取值的工具,作用是迭代取值
获取迭代器:
list1 = [1,2,3]
#调用__iter _ ()会得到一个返回值,该返回值就是一个迭代器对象
iter_list = list1.__iter _()
---如何迭代取值:
迭代器对象 __ next__ () 每执行一次,都会从迭代器对象中取出一个值
注意:取到最后一个值后,若值没有,则会报错
while True
try:
print(iter_list._next_())
except StopIteration:
break
for 循环的原理:
in : 会将可迭代对象自动调用_ iter _ ()变成迭代器对象
for i in 可迭代对象:
#会自动帮你调用_ next_
print(i) : for循环内部会有一个捕获异常机制,一旦遇到异常就会停止取值
迭代器的优缺点:
优点:提供一种不依赖索引取值的方式
节省内存空间
缺点:指定取值麻烦,每次取值都要从第一个开始查找
不能通过len计算长度