什么是装饰器?python
装饰器是一个函数,主要做用是用来给包装另外一个函数或者类函数
包装的目的是不改变原函数名(或类名)的状况下改变或添加被包装对象的功能code
是指装饰器是一个函数,传入的是一个函数,返回的也是一个函数对象
语法:文档
def 装饰器函数名(参数): 语句块 return 函数对象 @张诗琪函数名 def 函数名(形参列表): 语句块
示例:字符串
# 此示例示意装饰器函数的定义方式及装饰器来装饰另外一个函数 # 的语法 def mydeco(fn): def fx(): print("++++++++++++++++") print('----------------') return fx def myfunc(): '''此函数将做为被装饰函数''' print("myfunc被调用") # 原理是让myfunc从新绑定mydeco返回回来的函数 myfunc = mydeco(myfunc) myfunc() myfunc() myfunc()
# 此示例示意装饰器函数的定义方式及装饰器来装饰另外一个函数 # 的语法 def mydeco(fn): def fx(): print("++++++++++++++++") print('----------------') return fx @mydeco def myfunc(): '''此函数将做为被装饰函数''' print("myfunc被调用") # myfunc上的@mydeco 等同于在 # 此处加上 myfunc=mydeco(myfunc) myfunc() myfunc() myfunc()
# 此示例示意装饰器函数的定义方式及装饰器来装饰另外一个函数 # 的语法 def mydeco(fn): def fx(): print("++++++++++++++++") fn() # 调用之前的被装饰函数 print('----------------') return fx @mydeco def myfunc(): '''此函数将做为被装饰函数''' print("myfunc被调用") myfunc() myfunc() myfunc()
# 此示例示意装饰器的用途和做用 # 模拟银行项目 # 业务: 存钱和取钱 # ----- 小李如下小写写的装饰器----- def privileged_check(fn): def fx(n, yuan): print("正在检查权限..... OK!") fn(n, yuan) # 调用被装饰函数 return fx def send_message(fn): def fy(n, x): fn(n, x) print("正在发送给...", n) return fy # ------ @privileged_check def savemoney(name, x): print(name, '存钱', x, "元") @privileged_check @send_message def withdraw(name, x): print(name, "取钱", x, "元") # ---------- savemoney("小王", 200) savemoney("小赵", 400) withdraw("小钱", 500)
函数内第一次末赋值给任何变量的字符串是此函数的文档字
符串it
语法:class
def 函数名(参数列表): '函数的文档字符串' 语句块
示例:变量
def hello(name): '''这是一个向别人问好的函数 name 绑定人的姓名 ''' pass
说明:
文档字符串一般用来讲明本函数的功能的使用方法
函数的文档字符串绑定在函数对象的__doc__ 属性上原理
函数的 doc 属性
__doc__属性用于绑定函数的文档字符串
函数定义语句的完整的语法: [@装饰器名1] [@装饰器名2] ... def 函数名([位置形参], [*元组形参], [命名关键字形参] ,[**字典形参]): '文档字符串' 语句块