README.md

    PyPi Version

    FunnyDeco

    Collection of useful decorators for python projects

    Implements:

    1. Benchmarking util for methods
    2. Singleton pattern realisation for classes
    3. “Static” variables support in functions

    Installation:

    pip install funnydeco
    

    Examples:

    1. Benchmark decorator

    from funnydeco.core import benchmark
    
    
    # noinspection PyUnusedLocal
    @benchmark
    def long_loop() -> int:
        """
        Demo func for example of benchmark
        """
        result = 0
        for i in range(int(1e7)):
            result += i
    
        print('foo')
    
        return result
    
    
    if __name__ == '__main__':
        long_loop(print_benchmark=True, benchmark_name='Long loop procedure')
        long_loop()
    

    2. Singleton decorator

    from funnydeco import singleton, SingletonReseter
    from time import sleep
    
    
    @singleton
    class SlowInitClass(SingletonReseter):
        """
        Demo class for example of singleton decorator
        """
        def __init__(self):
            self.variable = 1
            print("I'm sleeping...")
            sleep(3)
            print("I'v woken up!")
    
    
    if __name__ == '__main__':
        print('First dumbass init:')
        dumbass1 = SlowInitClass()
        print(f'variable={dumbass1.variable}')
        dumbass1.variable = 2
    
        print()
    
        print('Second dumbass init:')
        dumbass2 = SlowInitClass()
        print(f'variable={dumbass2.variable}')
        print()
    
        print('Third dumbass init:')
        print('Temporary stopping singleton behaviour')
        SlowInitClass().reset_singleton()
        dumbass3 = SlowInitClass()
        print(f'variable={dumbass3.variable}')
        dumbass3.variable = 3
        print()
    
        print('Fourth dumbass init:')
        dumbass4 = SlowInitClass()
        print(f'variable={dumbass4.variable}')
        print()
    

    If you do not need to use reset_singleton functionality you may not to inherit your class from SingletonReseter

    3. Static variables decorator

    from funnydeco import static_vars
    
    
    @static_vars(baz=False)
    def foo(bar) -> None:
        """
        Demo func for example of static_vars
        """
        print(bar, foo.baz)
        foo.baz = not foo.baz
    
    
    if __name__ == '__main__':
        foo(1)
        foo(2)
        foo(3)
        foo(4)
    

    Описание

    коллекция полезных декораторов

    Конвейеры
    0 успешных
    0 с ошибкой