装饰器 decorators(专业提高篇)
1、装饰器的定义
装饰器是一个函数,主要作用是用来包装另一个函数或类
2、作用
在不改变原函数名(或类名)的情况下改变被包装对象的行为
3、函数装饰器的定义
函数装饰器是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数
4、语法
def 装饰器函数名(参数):
语句块
return 函数对象
@装饰器函数名<换行>
def 函数名(形参列表):
语句块
5、示例
def mydeco(fn):
def fx():
print("fx函数被调用")
return fx
# myfunc加了mydeco装饰器,等同于在myfunc创建之后调用
# myfunc = mydeco(myfunc)
@mydeco
def myfunc():
print("函数myfunc被调用")
# 这样的写法可以用装饰器来代替
# 等同于
# @mydeco
# def myfunc()....
# myfunc = mydeco(myfunc)
myfunc()
注:装饰器只调用一次,后面再次调用就是调用的返回的函数
被装饰函数带有参数的装饰器
def msg_service(fn):
print("装饰器函数被调用,并返回 原函数/修改后的功能(闭包)")
def savemoney2(name,x):
print("欢迎",name,"来银行,请取号!!!")
fn(name,x)
print(name,"办理了存",x,"元钱的业务,短信发送中")
return savemoney2
@msg_service
def savemoney(name,x):
print(name,"存钱",x,"元")
savemoney("小张",200)
savemoney("小灶",500)
注:
用到了闭包
可用于计算/测试程序运行的时间