昨天去面试,发现了装饰器还是不太熟悉,
笔试题目是:
随意编写两个对输入参数做加减乘除运算的函数(需要有除法),写完后,用装饰器实现对函数出现除数为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