2020-12-30随堂笔记

装饰器模板:

def outter(func):       #func = 被装饰对象func函数的内存地址
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        return res
    return wrapper     #一定不能加括号
func = outter(func)      #outter(被装饰对象func函数的内存地址)  ——>返回wrapper函数的内存地址
                              #func = wrapper函数的内存地址
func()

装饰器的语法糖:
就是在被装饰对象函数的正上方写上 @装饰函数名 就拿上面装饰器模板来说:

func = outter (func)   等同于  @outter
                           	 def func()    

但装饰器函数必须在被装饰器函数上面

以上只是将被装饰函数与装饰函数的返回值,参数做到一样,若想将两个函数装饰的非常相似(此处不加也可以)则:

from functools import wraps     #这是python内部提供的一些功能,为了将两个函数的一些属性做到一致
def outter(func):             #func = 被装饰对象func函数的内存地址
    @wraps(func)
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        return res
    return wrapper     #一定不能加括号
func = outter(func)      outter(被装饰对象func函数的内存地址)  ——>返回wrapper函数的内存地址
                              func = wrapper函数的内存地址
func()

若想在装饰器中添加功能,找到装饰器的核心函数,将代码加进核心函数里即可
针对以上模板,就是将实现功能的代码放进wrapper函数里就行

叠加多个装饰器

  1. 加载顺序(deco函数的调用顺序):自下而上
  2. 执行顺序(wrapper函数的执行顺序):自上而下
    具体步骤如下图:

@deco3
@deco2
@deco1
def func(): #语义func=deco3(deco2(deco1(func)))
pass

在这里插入图片描述

什么是迭代器
迭代器指的是迭带取值得工具
什么是迭代?
迭代就是一个重复的过程,但是每一次重复都是在上一次的基础之上进行的
为何要用迭代器
1、迭代器提供了一种不依赖于索引的、通用的迭代取值方案
2、节省内存
缺点:取值不灵活,无法预知里面有多少个值,对同一个迭代器取值取完了,就完了,再想取就得重新定义一个迭代器

如何用迭代器
python中有可迭代对象与迭代器对象,内置的数据类型都是可迭代的对象

可迭代的对象
1、所有内置有__iter__方法的对象都叫可迭代的对象
只要调用可迭代对象的__iter__方法,返回的是它的迭代器
迭代器对象
1、内置有__next__方法
2、内置有__iter__方法
调用迭代器对象的__iter__方法,返回的是它自己,就跟没调用一样
调用迭代器对象的__next__方法,返回的是下一个值,不依赖索引,可以一直调用__next__直到取干净,
则抛出异常StopIteration

生成器=自定义迭代器:
利用函数创造迭代器:yield 与 return的区别,两者都是返回值,return 只能返回一次,而yield可以返回多个值
yield 可以提供一种自定义迭代器方案,可以将函数暂停住

def func():
    res=1
    while True:
    yield res
    res +=1
g = func()
next(g)

for 循环的原理代码如下:

nums_iter = iter(nums)
while True:
    try :
        res = next(nums_iter)
        print(res)
    except StopIteration:
        break

其实以上代码实现的就是:

for res in nums:
    print(res)

综上所述,我们遍历取值的时候,用for循环就行

新的知识点:
try:
要捕捉的内容
except 要捕捉的错误:
break

猜你喜欢

转载自blog.csdn.net/givenchy_yzl/article/details/111474895