python基础学习笔记 函数装饰器
python函数–装饰器
装饰器:给原本的函数一个额外的功能 ,不要改变内部
1.开放封闭原则:
a.已经写好的代码,尽可能不要修改
b.如果想要新增功能,在原先代码基础上,单独进行扩展
2.单一职责:一个函数尽可能实现单一功能,不要增加额外功能
3.语法糖 装饰器写法: 在函数定义前,写一个@…
例子:
对不带参数的函数进行装饰
# 给某一函数增加一些额外的功能
# 1.函数名字不能发生改变
# 2.函数体内部代码不能发生改变
def check(func):
#装饰器里面要有一个闭包函数
def inner():
print("登录验证操作....")
func()
return inner
@check # fss = check(fss)
def fss():
print("发说说..")
fss()
运行结果:
登录验证操作....
发说说..
对带有参数的函数进行装饰(写成不定长参数形式)
# 对带有参数的函数进行装饰
def zsq(func):
def inner(*args, **kwargs):
# args是元组,kwargs是字典
print("-" * 30)
func(*args, **kwargs) # 怎么装包的,就怎么拆包
return inner
@zsq
def pnum(num, num2, num3):
print(num, num2, num3)
@zsq
def pnum2(num):
print(num)
pnum(123, 222, num3=666)
pnum2(999)
运行结果:
------------------------------
123 222 666
------------------------------
999
对带有返回值额函数进行装饰
# 对带有返回值的函数进行装饰
# 要点:保证被装饰的函数的格式和装饰器内包的格式一致
def zsq(func):
def inner(*args, **kwargs):
# args是元组,kwargs是字典
print("-" * 30)
res = func(*args, **kwargs) # 怎么装包的,就怎么拆包
return res
return inner
@zsq
def pnum(num, num2, num3):
print(num, num2, num3)
return num + num2 + num3
@zsq
def pnum2(num):
print(num)
res1 = pnum(123, 222, num3=666)
res2 = pnum2(999)
print(res1, res2)
结果:
------------------------------
123 222 666
------------------------------
999
1011 None
带有参数的装饰器
# 带有参数的装饰器
def getzsq(char):
def zsq(func):
def inner(*args, **kwargs):
print(char * 30)
res = func(*args, **kwargs) # 怎么装包的,就怎么拆包
return res
return inner
return zsq
@getzsq("-")
def f1():
print("666")
f1()
运行结果:
------------------------------
666