Python基础学习--关于函数装饰器的浅薄理解&使用

预备知识:函数可以作为参数,也可作为返回值


一、装饰器是什么?

python的装饰器就是一种拓展被装饰函数功能的一种函数,它的目的在于不改变被装饰函数的源代码和调用方式的情况下增加新的功能。

举个例子

你的手机只有打接电话,发短信的功能,某天,你要给你的手机增加新的功能,比如上网,即其他功能不变,单纯增加上网这一个功能

二、用法

1.不带参数的函数装饰器

代码如下(示例):

def funa(f):  #将函数f作为参数  ①
    def funb():   #定义内部函数funb  ③
        print("hello")
        f()       #调用函数f    ④
        print("china")
    return funb   #返回一个函数funb  ②

@funa
def fund():  
    print("你好,中国")  
fund()  
#outputs:hello
#        你好,中国
#        china

 以下装饰器写法完全等价于右边


@funa              		<==>    fund=funa(fund)
def fund() :                    fund()  
print("你好,中国")
fund() 

运行流程示意如下

2.带参数的函数装饰器

代码如下(示例):

import time

def timeit(iteration):
    def inner(f):
        def wrapper(*args,**kwargs):
            start=time.time()
            for i in range(iteration):
                ret=f(*args,**kwargs)   #*args,**kwargs 不定长参数,可写入多个参数
            print(time.time()-start)
            return ret
        return wrapper
    return inner

@timeit(3)
def double(x):
    return x*2
double(1)
# outputs:3.0994415283203125e-06

注意:这种写法是先计算装饰器里的参数,然后把double(1)传入函数timeit中,并最终返回结果显示

@timeit(3)

def double(x):

return x*2

double(1)

等价于

double=timeit(3)(double)

doubel(1)

运行流程示意如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上少年,且听这风吟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值