'''
裝飾器
概念:是一個閉包,把一個函數當做參數返回一個替代版的函數,本質上就是一個返回函數的函數
'''
#簡單的裝飾器
def func1():
print("welcome to beijing")
def outer(func):
def inner():
print("******************")
func()
return inner
#f是函數func1的加強版本
f = outer(func1)
f()
"""
#複雜一點的
def outer(func):
def inner(age):
if age<0:
age = 0
func(age)
return inner
#使用@符號將裝飾器應用到函數
#@python2.4支持使用@符號
@outer
def say(age):
print("tom is %d years old"%(age))
say(-10) #tom is 0years old
"""
#通用裝飾器
def outer(func):
def inner(*args,**kwargs):
#添加修改的功能
print("&&&&&&&&&&&&&&&&&&")
func(*args,**kwargs)
return inner
@outer
def say(name,age):
print("my name is %s,I am %d years old"%(name,age))
say("Tom",99) #my name is Tom,I am 99 years old