#第一种不带参数的装饰器
def say():
print("亲爱的祖国我爱你")
def outter(func):
def inner():
print("我爱你中国,亲爱的母亲")
return func()
return inner
#在外部函数outter后面的括号里面只写被装饰函数的函数名,inner内部函数名返回是不加括号的,因为那样等于又调用了。
(1)第一种调用的方法,#f后面的括号就是调用的意思。
(重点):实际上这里的func=say,就是直接换个名字,然后 return func()就是return say(),而say()就是调用say函数。
f = outter(say)
f()
(2)第二种的调用方法,直接后面加括号。
outter(say)()
#第二种带参数的装饰器
def sum(a,b):
print(a+b)
return a+b
def outter(func):
def inner(a,b):
if a<0 and b<0:
a = abs(a)
b=abs(b)
(重点:)这里需要注意的是inner是一个函数,里面可以有丰富的函数内容,inner函数名后面的括号必须要与func函数名后面的括号里的形参(待传的参数)一样。
return func(a,b)
return inner
f = outter(sum)
print(f(1,2))