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

2019-06-15  本文已影响0人  dnsir

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

示例:

#! -*- 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()

小结

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

上一篇 下一篇

猜你喜欢

热点阅读