• 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
    

      

     

  • 相关阅读:
    【题解】Red-Blue Graph Codeforces 1288F 上下界费用流
    【题解】The Magician HDU 6565 大模拟
    HAOI2018游记
    【题解】【THUSC 2016】成绩单 LOJ 2292 区间dp
    【题解】【雅礼集训 2017 Day5】远行 LOJ 6038 LCT
    【题解】Catering World Finals 2015 上下界费用流
    《无问西东...》
    为了世界的和平~一起上caioj~~~!
    新征程~起航!
    bzoj4240: 有趣的家庭菜园(树状数组+贪心思想)
  • 原文地址:https://www.cnblogs.com/hamish26/p/11243221.html
Copyright © 2020-2023  润新知