# 创建几个函数
def fn():
print("这是一个fn函数")
def add(a, b):
return a+b
def mul(a, b):
return a*b
# 需求:扩展上面几个函数,在每个函数执行前后进行打印。
# 思路一:在原来的函数上进行修改;思路二:手动创建新函数,在新的函数里面加入打印,同事调用要扩展的函数
# 按照上面的思路做会有如下的问题:
# 1.思路一,二如果修改的函数过多,手动修改起来比较麻烦
# 2.思路一这样做会违背程序的开闭原则。(实际开发中核心或者基础代码不希望被修改)
# 按思路二创建了一个新函数,扩展fn
def fn1():
print("开始执行函数..")
fn()
print("函数执行结束..")
def fn2(a, b):
print("开始执行函数..")
r = add(a, b)
print("函数执行结束..")
return r
def fn3(a, b):
print("开始执行函数..")
r = mul(a, b)
print("函数执行结束..")
return r
# 上面扩展了3个函数,都达到了要求,就是每次手动创建太麻烦了并且没有通用性。
# 下面我们通过自动的方式创建新函数,免去每次手动创建新函数
# 自动创建函数的函数,
# 传参:待扩展的函数。
def auto_create(to_be_expand_func):
# 扩展后的函数
def new_function(*args, **kwargs):
# 扩展的功能:打印.....
print("开始执行函数..")
# 调用待扩展的函数
r = to_be_expand_func(*args, **kwargs)
# 扩展的功能:打印.....
print("函数执行结束..")
return r
return new_function
# 上面其实就是一个装饰器,实际用的时候可以按如下方法用.
# @装饰器函数,对函数进行扩展了,div不仅仅是原来的函数,而是扩展后的函数
@ auto_create
def div(a, b):
return a/b
if __name__ == "__main__":
# fn1()
print(fn2(123, 456))
print(fn3(100, 20))
f1 = auto_create(add)
r1 = f1(123, 456)
print(r1)
f2 = auto_create(mul)
r2 = f2(100, 20)
print(r2)
06-14
2万+
01-13
851