Answers for "how does decorators work in python"

19

decorator python

def our_decorator(func):
    def function_wrapper(x):
        print("Before calling " + func.__name__)
        func(x)
        print("After calling " + func.__name__)
    return function_wrapper

@our_decorator
def foo(x):
    print("Hi, foo has been called with " + str(x))

foo("Hi")
Posted by: Guest on September-30-2020
0

python decorator

import functools

# A decorator is a Higher order function "_with_logging"
# It takes the function to be decorated as its argument
# In order to pass in some arbitrary arguments, it must be wrapped into
# another HOF (Higher order function) that will receive the inputs
def with_logging(level=logging.DEBUG, msg = None):
    def _with_logging(fn):
        # 'wraps' is a HOF that will give fn's name and docs to decorated_fn i.e. 
        #   decorated_fn.__name__ = fn.__name__
        #   help(decorated_fn) = help(fn)
        @functools.wraps(fn)
        def decorated_fn(*args, **kwargs):
            res = fn(*args, **kwargs)
            print("n***************", f"n{msg}", "nExecuting with Args: ", *args, **kwargs)
            logging.log(level, res)
            return res
        return decorated_fn
    return _with_logging
  
# Used this way
@with_logging(level=logging.DEBUG, msg="Some awesome comment")
def hello_world(name):
  return f'Hello World {name}'
  
# Results after calling hello_world("John")
#
# ***************
# Some awesome comment
# Executing with Args: John
# Hello World John
Posted by: Guest on March-14-2021
0

examples of function decorators in Python

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)
            # Open the logfile and append
            with open(logfile, 'a') as opened_file:
                # Now we log to the specified 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
# A file called out.log now exists, with the above string

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

myfunc2()
# Output: myfunc2 was called
# A file called func2.log now exists, with the above string
Posted by: Guest on December-29-2020

Code answers related to "how does decorators work in python"

Python Answers by Framework

Browse Popular Code Answers by Language