Python装饰器11-装饰器函数使用参数

有些场景要求装饰器函数也有参数

示例:

#! -*- coding: utf-8 -*-
"""
在函数中嵌入装饰器
"""
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)
            with open(logfile, 'a') as opened_file:
                opened_file.write(log_string + '\n')
            return func(*args, **kwargs)
        return wrapped_function
    return logging_decorator

# 注意不是@logit
# logit() 返回的是logging_decorator,语法糖含义更深了
# 特别关注的这里是logit()而不是之前普通的logit。
@logit()
def myfunc1():
    pass

myfunc1()

@logit(logfile = 'func2.log')
def myfunc2():
     pass

 myfunc2()

小结

在业务开发中极少数场景需要装饰器函数也携带参数,理解装饰器的意义就可以轻松理解这种语法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容