Discuss / Python / 同时支持有参数和无参数的装饰器

同时支持有参数和无参数的装饰器

Topic source

蘑菇蘑菇

#1 Created at ... [Delete] [Delete and Lock User]
def log(value=None):    if hasattr(value, '__call__'):        def decorator(*args, **kwargs):            print(f"无参数装饰器调用{value.__name__}", args, kwargs)            return value(*args, **kwargs)    else:        def decorator(fn):            def wrapper(*args, **kwargs):                print(f"用装饰器参数'{value}'调用{fn.__name__}", args, kwargs)                return fn(*args, **kwargs)            return wrapper    return decorator@logdef test(name):    print(f"hello {name}")test("张三")

蘑菇蘑菇

#2 Created at ... [Delete] [Delete and Lock User]

def log(value=None):

    if hasattr(value, '__call__'):

        def decorator(*args, **kwargs):

            print(f"无参数装饰器调用{value.__name__}", args, kwargs)

            return value(*args, **kwargs)

    else:

        def decorator(fn):

            def wrapper(*args, **kwargs):

                print(f"用装饰器参数'{value}'调用{fn.__name__}", args, kwargs)

                return fn(*args, **kwargs)

            return wrapper

    return decorator

@log

def test(name):

    print(f"hello {name}")

test("张三")


  • 1

Reply