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

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

文章目录

目录

一、装饰器是什么?

二、使用

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

2.带参数的函数装饰器


一、装饰器是什么?

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() 

运行流程示意如下

Python基础学习--关于函数装饰器的浅薄理解&使用_第1张图片

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)

运行流程示意如下

Python基础学习--关于函数装饰器的浅薄理解&使用_第2张图片

你可能感兴趣的:(python,开发语言)