Decorators with parameters?

前端 未结 13 1403
我在风中等你
我在风中等你 2020-11-21 22:58

I have a problem with the transfer of variable \'insurance_mode\' by the decorator. I would do it by the following decorator statement:

@execute_complete_rese         


        
13条回答
  •  感情败类
    2020-11-21 23:21

    Great answers above. This one also illustrates @wraps, which takes the doc string and function name from the original function and applies it to the new wrapped version:

    from functools import wraps
    
    def decorator_func_with_args(arg1, arg2):
        def decorator(f):
            @wraps(f)
            def wrapper(*args, **kwargs):
                print("Before orginal function with decorator args:", arg1, arg2)
                result = f(*args, **kwargs)
                print("Ran after the orginal function")
                return result
            return wrapper
        return decorator
    
    @decorator_func_with_args("foo", "bar")
    def hello(name):
        """A function which prints a greeting to the name provided.
        """
        print('hello ', name)
        return 42
    
    print("Starting script..")
    x = hello('Bob')
    print("The value of x is:", x)
    print("The wrapped functions docstring is:", hello.__doc__)
    print("The wrapped functions name is:", hello.__name__)
    

    Prints:

    Starting script..
    Before orginal function with decorator args: foo bar
    hello  Bob
    Ran after the orginal function
    The value of x is: 42
    The wrapped functions docstring is: A function which prints a greeting to the name provided.
    The wrapped functions name is: hello
    

提交回复
热议问题