Skip to content

Instantly share code, notes, and snippets.

View adrianmarkperea's full-sized avatar

Adrian Mark Clave Perea adrianmarkperea

View GitHub Profile
import numpy as np
rng = np.random.RandomState(0)
# Create a lot of numbers
nums = rng.random(10000000)
# Decorate np.sort with our time_it transformer
timed_sort = time_it(np.sort)
# Perform the sort with our time_it functionality
timed_sort(nums)
import time
def time_it(fun):
def wrapper(*args, **kwargs):
start = time.time()
res = fun(*args, **kwargs)
end = time.time()
print(f'Function took {end-start}s')
return res
def call_three_times(fun):
def wrapper(*args, **kwargs):
fun(*args, **kwargs)
fun(*args, **kwargs)
res = fun(*args, **kwargs)
return res
return wrapper
>>> walkout('Dionisia')
Function `walkout` called
Bye Dionisia
Function `walkout` finished
def debug_transformer(fun):
# Allow wrapper to receive arbitrary args
def wrapper(*args, **kwargs):
print(f'Function `{fun.__name__}` called')
# And pass it to the original function
res = fun(*args, **kwargs)
print(f'Function `{fun.__name__}` finished')
return res
return wrapper
TypeError: wrapper() takes 0 positional arguments but 1 was given
@debug_transformer
def walkout(name):
print(f'Bye {name}')
walkout('Felicia')
>>> bob = get_bob()
Function `get_bob` called
Function `get_bob` finished
>>> print(bob)
Bob
def debug_transformer(fun):
def wrapper():
print(f'Function `{fun.__name__}` called')
res = fun() # get reference to original return value
print(f'Function `{fun.__name__}` finished')
return res
return wrapper
Function `get_bob` called
Function `get_bob` finished
None