开发者社区> 问答> 正文

python在函数中嵌入装饰器

python在函数中嵌入装饰器

展开
收起
montos 2020-04-16 18:59:48 656 0
2 条回答
写回答
取消 提交回答
  • 代码改变世界,我们改变代码

    @wraps(func) 这个装饰器是在functools下的,主要作用呢,

    当函数被装饰器,装饰的时候,doc就会被改变。 但是使用wraps可以恢复原样。

    2020-04-24 11:49:32
    赞同 展开评论 打赏
  • 我们回到日志的例子,并创建一个包裹函数,能让我们指定一个用于输出的日志文件。

    from functools import wraps
    
    def logit(logfile='out.log'):
        def logging_decorator(func):
            @wraps(func)
            def wrapped_function(*args, **kwargs):
                log_string = func.__name__ + " was called"
                print(log_string)
                # 打开logfile,并写入内容
                with open(logfile, 'a') as opened_file:
                    # 现在将日志打到指定的logfile
                    opened_file.write(log_string + '\n')
                return func(*args, **kwargs)
            return wrapped_function
        return logging_decorator
    
    @logit()
    def myfunc1():
        pass
    
    myfunc1()
    # Output: myfunc1 was called
    # 现在一个叫做 out.log 的文件出现了,里面的内容就是上面的字符串
    
    @logit(logfile='func2.log')
    def myfunc2():
        pass
    
    myfunc2()
    # Output: myfunc2 was called
    # 现在一个叫做 func2.log 的文件出现了,里面的内容就是上面的字符串
    
    2020-04-16 19:00:07
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载