装饰器、迭代器和生成器的使用方法

装饰器

定义:
装饰器的本质就是一个实参高阶函数和返回值高阶函数
装饰器是用来给函数添加功能(在不修改原函数的基础上给函数添加功能)

无参装饰器

语法:

def 函数1(func):
    def test(*args,**kwargs):
        func(*args,**kwargs)
        添加新的功能
    return test

说明:
函数名1 - 装饰器对应的函数名,也是装饰器的名字(根据需要添加的新功能命名)
func - func指向的就是需要添加新功能的函数
test - 指向的是已经添加完功能的新函数

调用:@装饰器名称

例:

练习:写一个装饰器,可以给返回值是数字的函数添加功能,让原函数的结果保留两位小数
def add1(func):
    def test(*args,**kwargs):
        x=func(*args,**kwargs)
        if type(x) in (int,float):
            return float(f'{x:.2f}')
        return x
    return test

@add1
def sum1(a,b):
    return a+b

print(sum1(2,1.225))

有参装饰器

语法:

def 装饰器名称(装饰器的参数列表):
    def test1(func):
        def test2(*args,**kwargs):
            func(*args,**kwargs):
            添加新的功能
        return test2
    return test1

例:

写一个装饰器,在函数结束后打印n个*
def dayin(n):
    def test1(func):
        def test2(*args,**kwargs):
            result=func(*args,**kwargs)
            print('*'*n)
            return result
        return test2
    return test1

@dayin(4)
def add1(a=1,b=2):
    print(a+b)
add1(2,5)
迭代器

特点:
是一中特殊的容器:
a.不能直接查看所有元素(打印看不到任何元素;不能计算长度)
b.如果要读取元素的值必须将这个元素从迭代器中取出来(取出来后就再放不回去,迭代器中就不再有这个元素了)
创建迭代器:
a.将其他序列转换成迭代器:iter(序列)
b.创建生成器(生成器的本质就是迭代器)

例:

iter1=iter([10,20,30])

获取迭代器的元素(查)
注意:不管以任何方式获取了迭代器的元素,这个元素在迭代器里就不存在了

  1. next(迭代器) - 获取迭代器中最前面的一个元素
  2. 遍历
生成器

定义:
生成器的本质就是迭代器
生成器其实是能够产生多个数据的容器,而不是真正同时保存多个数据的容器
如何创建:
调用带有yield关键字的函数就能得到一个生成器
注意:调用带有yield关键字的函数:a.不执行函数体 b.获取到的是生成器对象

生成器产生数据的原理

  1. 调用函数创建生成器对象的时候不会执行函数体,当获取生成器中元素的时候才会执行函数体
  2. 获取第一个元素的时候从函数开始开始执行,执行遇到第一个yield就会停下,并且将yield后面的数据作为这次获取到的元素,下次获取元素的时候从上一次结束的位置接着往后执行函数体直到遇到下一个yield,并且将新的yield的数据作为新的元素,以此类推
  3. 如果从上次结束的位置开始到函数结束都没有遇到yield那么这个生成器就不会再创建数据了,如果是next操作,这个时候会报错

例:

练习:写一个学号的生成器,能够产生stu001~stu9999的学号
def stu():
    for x in range(1,10000):
        x=str(x)
        yield f'stu{x.zfill(4)}'
num=stu()
for x in range(10):
    print(next(num))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值