1、装饰器
'''
装饰器:
概念:是一个闭包,把一个函数当做参数,返回一个替代版 函数,本质上就是一个返回函数的函数
'''
#简单的装饰器
def func1():
print("sunck is good man")
#一般不这样写
'''
def outer():
print("*******")
func1()
outer()
'''
def outer(func):
def inner():
print("*******")
func()
# return inner
#func1 = outer(func1)
#f是函数func1的加强版本
#outer(func1)
f = outer(func1)
f()
-------------------------------------
2、复杂装饰器案例
def outer(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
#使用@符号将装饰器应用到函数,Python2.4支持使用@符号
@outer #相当于say = outer(say)
def say(age):
print("sunck is %d years old" % (age))
say(-18)
#say = outer(say) #如果装饰器是独立的,可以不用写这句,直接用@符号
say(-18)
-------------------------
3、通用装饰器
def outer(func):
def inner(*args, **kwargs):
#添加修饰的功能
print("&&&&&&&&&&&&")
func(*args, **kwargs)
return inner
@outer
def say(name, age): #函数的参数理论上是无限制的,但是实际上最好不要超过6、7个
print("my name is %s, I am %d years old" % (name, age))
say("sunck", 12)