TI/Skrypty z zajęć/k8

Z Brain-wiki
# -*- coding: utf-8 -*-
"""
Created on Wed Jun  3 11:09:18 2020

@author: Tomek
"""
def dodajAutora(fun):
    fun.autor = 'Tomasz Gubiec'
    return fun

def opiszWykonanie(fun):
    def f(*args,**kwargs):
        print('Poczatek wykonania funkcji',fun.__name__, 'dla argumentow', args, kwargs)
        value =  fun(*args,**kwargs)
        print('Koniec wykonania funkcji',fun.__name__, 'dla argumentow', args, kwargs)
        print(' a otrzymany wynik to', value)
        return value
    return f

class dodajAutora2():
    def __init__(self,fun):
        self.__fun = fun
    
    @property
    def autor(self):
        return 'Tomasz Gubiec'
    
    def __call__(self, *args, **kwargs):
        return self.__fun(*args, **kwargs)
    
class memoize():
    def __init__(self,fun):
        self.__fun = fun
        self.__memo = {}
        
    def __call__(self, *args):
        if args in self.__memo:
            print('to juz kiedys bylo liczone')
            return self.__memo[args]
        else:
            value = self.__fun(*args)
            self.__memo[args] = value
            return value
    
    
    
@memoize #kwadratowa = dodajAutora(kwadratowa)
def kwadratowa(x):
    return x*x

@memoize #liniowa = dodajAutora(liniowa)
def liniowa(x):
    return 2*x + 3


@dodajAutora
@memoize
def fibo(n):
    if (n == 1) or (n == 2): return 1
    return fibo(n-1) + fibo(n-2)

#a = [kwadratowa(i) for i in range(100)]