Skip to content

Latest commit

 

History

History
72 lines (50 loc) · 1.72 KB

08-decorators.md

File metadata and controls

72 lines (50 loc) · 1.72 KB

Dekorátory

Vlastní dekorátor

Napište dekorátor, který zachytí volání funkce a uchová parametry volání funkce.

Pro počítání můžete s výhodou použít Counter z modulu collections


Mějme naivní rekurzivní funkci na výpočet čísla z Fibonacciho posloupnosti

def fib(n):
    "Return n-th Fibonacci number"
    if n < 2:
        return n
    return fib(n-2) + fib(n-1)

Přidejte k funkci vlastní dekorátor a zjistěte, s jakými parametry byla nejčastěji volána.

class CallInspector:
    def __init__(self):
        pass
        
    def inspect(self, func):
        "this is decorator"
        pass
        
    def show_call_stats(self):
        "show some call statistics"
        print("Function was called {} times")
        print("Most frequently called parameter combinations was: ")
        

inspector = CallInspector()

@inspector.inspect
def fib(n):
    pass  # the original function should be here
    
# invoke function and show call statistics
fib(256)
inspector.show_call_stats()

Dekorátor cache

Pomocí modulu timeit změřte, jak dlouho vykonávání fib(256) trvá. Zkuste použít dekorátor @cache, a změřte, jestli se použitím cache výpočet zrychlí.

Inspection

V REPL se podívejte, co si o funkci fib() myslí nápověda před dekorováním a po dekorování.

>>> help(fib)