zoukankan      html  css  js  c++  java
  • python3 开发面试题(装饰器必须考)6.4

    def f():
        print("2018-06-04")
    
    # 每次调用f的时候 在打印"2018-06-04" 之前打印一句 开始, 之后再打印一句 结束  
    def wrapper(func):
        def inner():
            print("start")
            func()
            print("end")
        return inner
    
    @wrapper
    def f():
        print("2018-06-04")
    答案

    但这里面还是有缺陷的,原函数如果有功能注释的话,经过装饰器装饰的函数,就看不到原函数的注释,所以我们可以优化一下

    from functools import wraps    #优化装饰器的模块
    
    def wrapper(func):
        @wraps(func)                 #在这里装饰
        def inner(*args, **kwargs):  #有参数的情况
            print("start")
            ret = func(*args, **kwargs)
            print("end")
            return ret            #有返回值的情况下
        return inner
    
    @wrapper
    def f(*args, **kwargs):   #有参数的情况下
        """
        这是一个测试装饰器的函数,没什么其他的用法
        :param args:
        :param kwargs:
        :return:
        """
        print("2018-06-04")
    
    f()  # inner()
    print(f.__doc__)
    print(f.__name__)
    
    '''
    start
    2018-06-04
    end
    
        这是一个测试装饰器的函数,没什么其他的用法
        :param args:
        :param kwargs:
        :return:
        
    f
    '''
  • 相关阅读:
    Vue 04
    Vue小练习 03
    Vue 03
    Vue小练习 02
    Vue 02
    Vue 小练习01
    Vue 01
    Django 11
    JUC(一):volatile关键字
    Kubernetes【K8S】(五):Service
  • 原文地址:https://www.cnblogs.com/ManyQian/p/9133309.html
Copyright © 2011-2022 走看看