python 的装饰器,
昨天去面试,发现了装饰器还是不太熟悉,
笔试题目是:
随意编写两个对输入参数做加减乘除运算的函数(需要有除法),写完后,用装饰器实现对函数出现除数为0的异常捕获,如果有异常,使用print打印日志。
这个题我就懵了,装饰器不是在def 函数中上面使用@ 才是装饰器吗,这个怎么用。我只会使用try except finally捕获异常。。
下来翻阅资料,得好好查缺补漏。下次做笔试这个知识点不能再不会了。
================================================================================================
装饰器本质其实就是一个函数, 可以让其它函数不改动源代码的情况下增加其他新功能, 比如网站经常需要的权限校验等场景。
"""
随意编写两个对输入参数做加减乘除运算的函数(需要有除法),
写完后,用装饰器实现对函数出现除数为0的异常捕获,如果有异常,使用print打印日志。
"""
def catchExcept(func):
def wrapper(*args, **kwargs):
"""
:param args:被装饰函数的参数,位置参数
:param kwargs:被装饰函数的关键子参数,返回字典类型
:return:
"""
# 调用被装饰的函数
try:
result = func(*args, **kwargs)
return result
except Exception as e:
print("两个数字相除,除数为不能为0")
return wrapper
@catchExcept
def math1(a, b):
add = a + b
minus = a - b
muliti = a * b
divide = a / b
print("{} + {} ={} ".format(a,b,add))
print("{} - {} = {}".format(a,b,minus))
print("{} * {} = {}".format(a,b,muliti))
print("{} / {} = {}".format(a,b,divide))
math1(1,0)
运行结果:
两个数字相除,除数为不能为0 Process finished with exit code 0
每天进步一点
浙公网安备 33010602011771号