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

  

 

原文地址:https://www.cnblogs.com/hamish26/p/11243221.html