python笔记--装饰器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python笔记--装饰器相关的知识,希望对你有一定的参考价值。

装饰器                                                                                                         

    装饰器作用就是为自定义的函数添加功能,高阶函数和闭包结合使用就可以形成装饰器。简单举例说明:

#-*- coding:utf-8 -*-
#假如我们有多个函数需要执行,但是执行前需要手工确认
import sys
def my_print():
    print ("this is a test!")

def confirm(f):
    def inner():
        my_confirm=input("是否继续yes/no:")
        if my_confirm == 'yes':
            f()
        else:
            sys.exit()
    return inner

my_print=confirm(my_print)
my_print()

    python支持一种友好的写法,可以省去再次定义原来的函数:

#-*- coding:utf-8 -*-
import sys
def confirm(f):
    def inner():
        my_confirm=input("是否继续yes/no:")
        if my_confirm == 'yes':
            f()
        else:
            sys.exit()
    return inner

@confirm    #在需要调用判断功能的函数前加@
def my_print():   
    print ("this is a test!")

my_print()

    如果被装饰的功能函数有参数,在装饰器内部也要添加对应的参数,简单举例说明:

#-*- coding:utf-8 -*-
#装饰器之功能函数加参数
import sys

def confirm(f):
    def inner(*x,**y):
        my_confirm=input("是否继续yes/no:")
        if my_confirm == 'yes':
            f(*x,**y)    #注意f和inner的参数要一一对应
        else:
            sys.exit()
    return inner

@confirm    
def my_sum(*a,**b):
    result=0
    for i in a:
        result+=i
    print(result)

my_sum(1,2,3,4,5)

    如果再为装饰器添加一个功能,并且装饰器可以传参,只需要在原有装饰器外部再添加一层嵌套函数,简单举例说明:

#-*- coding:utf-8 -*-
import sys
def judge(default=0):
    def confirm(f):
        def inner(*x,**y):
            my_confirm=input("是否继续yes/no:")
            if my_confirm == 'yes':
                print(f(*x,**y))
                if f(*x,**y) > int(default):
                    print('more')
                else:
                    print('less')
            else:
                sys.exit()
        return inner
    return confirm

@judge(10)
def my_sum(*a,**b):
    result=0
    for i in a:
        result+=i
    return(result)    

my_sum(1,2,3,4,5)


以上是关于python笔记--装饰器的主要内容,如果未能解决你的问题,请参考以下文章

安全牛学习笔记python装饰器

Python学习笔记012——装饰器

python笔记5:装饰器内置函数json

python学习笔记之装饰器(语法糖)

24Python装饰器笔记

python笔记第九天 装饰器