简单例子
此文的最后一个蛋疼的例子可以帮助理解这个概念,
# # 错误写法
# 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