Bootstrap

python 装饰函数

简单例子

此文的最后一个蛋疼的例子可以帮助理解这个概念,

# # 错误写法
# def warp(fun):
#     print("***")
#     fun()
#     print("***")
#
# @warp
# def myprint():
#     print("lalala")
#
# myprint #这句并没有卵用,删掉这句也会有输出,输出是由@warp这句打印的
# print(myprint) #None


# 正确的写法是在函数体中定义函数并返回函数
def warp(fun):
    def warpper():
        print("***")
        fun()
        print("***")
    return warpper

@warp
def myprint():
    print("lalala")

myprint ()

参数

# -*- coding: utf-8 -*-
# 被装饰的函数的参数
def warp(fun):
    def warpper(x):
        print("***")
        fun(x)
        print("***")
    return warpper

@warp
def myprint(x):
    print(x)

myprint("hello")


# 装饰器参数,例子一
def warp_select_long(style):
    if(style=="*"):
        def warp1(fun):
            def warpper(x):
                print("***")
                fun(x)
                print("***")

            return warpper
        return warp1
    else:
        def warp2(fun):
            def warpper(x):
                print("===")
                fun(x)
                print("===")
            return warpper
        return warp2




# 装饰器参数,例子二
def warp_select_short(c):
    def warp1(fun):
        def warpper(x):
            print(c*3)
            fun(x)
            print(c*3)
        return warpper
    return warp1


@warp_select_short("=")
@warp_select_long("-")
def myprint(x):
    print(x)
myprint("hello")

其他

functools 和 类装饰器的例子:
http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html

参数,返回值,类函数的例子:
https://www.cnblogs.com/mess4u/p/3851358.html

;