dekoratory


In [1]:
def moja(x):
    return x + 1

In [2]:
moja(12)


Out[2]:
13

In [3]:
def f():
    
    def g():
        print("Hi, it's me 'g'")
        print("Thanks for calling me")
        
    print("This is the function 'f'")
    print("I am calling 'g' now:")
    g()

    
f()


This is the function 'f'
I am calling 'g' now:
Hi, it's me 'g'
Thanks for calling me

In [3]:
def opakowanie(funkcja):
    def opakowana(x):
        print("Opakowałem funkcję o nazwie:",funkcja.__name__)
        return funkcja(x)
    return opakowana

In [4]:
g = opakowanie(moja)

In [6]:
g(881)


Opakowałem funkcję o nazwie: moja
Out[6]:
882

In [14]:
@opakowanie
def ble(x):
    return x+2

In [15]:
ble(33)


Opakowałem funkcję o nazwie: ble
Out[15]:
35

In [19]:
def chk(f):
    def checked(x):
        if x>0:
            return f(x)
        else:
            return 0.0
    return checked

In [20]:
from math import log
@chk
def new_log(x):
    return log(x)

In [21]:
log(-1)


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-21-95d5c3276f9b> in <module>()
----> 1 log(-1)

ValueError: math domain error

In [24]:
new_log(2),log(2)


Out[24]:
(0.6931471805599453, 0.6931471805599453)

In [25]:
new_log(-1)


Out[25]:
0.0

In [26]:
def greeting(expr):
    def greeting_decorator(func):
        def function_wrapper(x):
            print(expr + ", " + func.__name__ + " returns:")
            func(x)
        return function_wrapper
    return greeting_decorator

@greeting("You")
def foo(x):
    print(42)

foo("Hi")


You, foo returns:
42

In [27]:
def greeting(expr):
    def greeting_decorator(func):
        def function_wrapper(x):
            print(expr + ", " + func.__name__ + " returns:")
            func(x)
        return function_wrapper
    return greeting_decorator


def foo(x):
    print(42)

greeting2 = greeting("Kochany")
foo = greeting2(foo)
foo("Hi")


Kochany, foo returns:
42

In [ ]:


In [ ]: