# 开闭原则:程序的设计,要求开发对程序的扩展,要关闭对程序的修改
# 创建一个函数
def add(num1:float,num2:float):
'''
传入两个参数,返回相加的结果
:return: 返回结果
'''
return num1+num2
# 需求:在计算前打印'开始计算......',在计算完成后打印‘计算完毕!’ # 我们一般不会去改动原来函数的内容,而是对函数进行扩展 # 可以嵌套一个函数来进行扩展,但还不是最好的写法
def add1(num1,num2):
print('开始计算......')
r=add(num1,num2)
print('计算完成!')
return r
add1(1,2) # 这时候可以简单的实现需求了
# 但是我们如果要对很多函数进行扩展同样的需求,那么量很大,那么我们就不能再手动生成每一个对应的嵌套函数了 # 这时候,可以考虑类似代理工厂的一个函数,对传入函数进行修饰并返回我们满足需求的函数
def begin_end(your_function):
# 定义一个函数
def new_fun(*args,**a): # *args,**a用于接收可变形参和关键字参数
print('开始计算......')
r=your_function(*args,**a) # 将接收到的实参传入
print('计算完成!')
return r
return new_fun
my_add=begin_end(add)
print(my_add(1, 2))
# 像begin_end这样的函数就是装饰器,通过装饰器,可以在不修改原来函数的情况下,对其进行扩展 # 在开发中,我们都是通过装饰器来扩展函数功能的 # 一般定义好之后我们会这样使用
# 创建一个函数
@begin_end
def add3(num1:float,num2:float):
'''
传入两个参数,返回相加的结果
:return: 返回结果
'''
return num1+num2
add3(1,2) # 这样原函数就扩展完成了,名字也没有发生改变