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 с ошибкой