zoukankan      html  css  js  c++  java
  • 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
    

      

     

  • 相关阅读:
    Dark 运算符
    Dark 数据类型
    分支管理
    Git 远程仓库
    DELPHI实现百度开放平台
    win2008使用FireDac连接ORACLE数据库问题
    20160115学习日志
    20160113第一个ANDRIOD开发日志
    struts2漏洞与修复
    DELPHI XE5 与SQLITE
  • 原文地址:https://www.cnblogs.com/hamish26/p/11243221.html
Copyright © 2011-2022 走看看