parent
e8c503d7b6
commit
6e72f80aa6
@ -0,0 +1 @@ |
|||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
def adder(): |
||||||
|
n = 0 |
||||||
|
|
||||||
|
def add(): |
||||||
|
nonlocal n |
||||||
|
n += 1 |
||||||
|
return n |
||||||
|
|
||||||
|
return add |
@ -0,0 +1,14 @@ |
|||||||
|
def debug_call(f): |
||||||
|
def inner(*args, **kwargs): |
||||||
|
print(f, args, kwargs) |
||||||
|
return f(*args, **kwargs) |
||||||
|
|
||||||
|
return inner |
||||||
|
|
||||||
|
|
||||||
|
# @debug_call |
||||||
|
def foo(a, b): |
||||||
|
return a + b |
||||||
|
|
||||||
|
|
||||||
|
foo = debug_call(foo) |
@ -0,0 +1,77 @@ |
|||||||
|
# first attempt |
||||||
|
def deco_first(f): |
||||||
|
def inner(*args, **kwargs): |
||||||
|
return f(*args, **kwargs) |
||||||
|
|
||||||
|
inner.__name__ = f.__name__ |
||||||
|
inner.__doc__ = f.__doc__ |
||||||
|
inner.__qualname__ = f.__qualname__ |
||||||
|
|
||||||
|
return inner |
||||||
|
|
||||||
|
|
||||||
|
# second attempt |
||||||
|
from functools import update_wrapper |
||||||
|
|
||||||
|
|
||||||
|
def deco_second(f): |
||||||
|
def inner(*args, **kwargs): |
||||||
|
return f(*args, **kwargs) |
||||||
|
|
||||||
|
update_wrapper(inner, f) |
||||||
|
return inner |
||||||
|
|
||||||
|
|
||||||
|
# third attempt |
||||||
|
|
||||||
|
|
||||||
|
def my_wraps(original): |
||||||
|
def deco(wrapper): |
||||||
|
update_wrapper(wrapper, original) |
||||||
|
return wrapper |
||||||
|
|
||||||
|
return deco |
||||||
|
|
||||||
|
|
||||||
|
from functools import partial |
||||||
|
|
||||||
|
|
||||||
|
def partial_wraps(original): |
||||||
|
return partial(update_wrapper, wrapped=original) |
||||||
|
|
||||||
|
|
||||||
|
# def deco_third(f): |
||||||
|
# def inner(*args, **kwargs): |
||||||
|
# return f(*args, **kwargs) |
||||||
|
# |
||||||
|
# deco = my_wraps(f) |
||||||
|
# inner = deco(inner) |
||||||
|
# return inner |
||||||
|
|
||||||
|
|
||||||
|
def deco_third(f): |
||||||
|
@partial_wraps(f) |
||||||
|
def inner(*args, **kwargs): |
||||||
|
return f(*args, **kwargs) |
||||||
|
|
||||||
|
return inner |
||||||
|
|
||||||
|
|
||||||
|
# third attempt |
||||||
|
from functools import wraps |
||||||
|
|
||||||
|
|
||||||
|
def deco_fourth(f): |
||||||
|
@wraps(f) |
||||||
|
def inner(*args, **kwargs): |
||||||
|
return f(*args, **kwargs) |
||||||
|
|
||||||
|
return inner |
||||||
|
|
||||||
|
|
||||||
|
@deco_third |
||||||
|
def foo(a, b, c): |
||||||
|
""" |
||||||
|
Foo function docstring |
||||||
|
""" |
||||||
|
return a + b + c |
@ -0,0 +1,8 @@ |
|||||||
|
from functools import partial |
||||||
|
|
||||||
|
|
||||||
|
def foo(a, b, new_name): |
||||||
|
return new_name * (b + a) |
||||||
|
|
||||||
|
|
||||||
|
bar = partial(foo, c=500) |
@ -0,0 +1,33 @@ |
|||||||
|
def adder(): |
||||||
|
n = 0 |
||||||
|
|
||||||
|
def add(): |
||||||
|
nonlocal n |
||||||
|
n += 1 |
||||||
|
return n |
||||||
|
|
||||||
|
return add |
||||||
|
|
||||||
|
|
||||||
|
def retry(n: int = 5): |
||||||
|
def deco(f): |
||||||
|
def inner(*args, **kwargs): |
||||||
|
for _ in range(n): |
||||||
|
f(*args, **kwargs) |
||||||
|
|
||||||
|
return inner |
||||||
|
|
||||||
|
return deco |
||||||
|
|
||||||
|
|
||||||
|
# @retry(5) |
||||||
|
def foo(): |
||||||
|
print("Hello world!") |
||||||
|
|
||||||
|
|
||||||
|
foo = (retry(5))(foo) |
||||||
|
|
||||||
|
|
||||||
|
@retry(15) |
||||||
|
def bar(): |
||||||
|
print("Bar") |
Loading…
Reference in new issue