added decorator explaination
This commit is contained in:
parent
df0921240c
commit
67f2ce93e6
2 changed files with 40 additions and 0 deletions
40
4_decorators.py
Normal file
40
4_decorators.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
"""
|
||||
Now that we have covered the basics of a function and variables, we will quickly cover decorators.
|
||||
Decorators are extremely useful and are used to wrap existing functions in another function, you can use this
|
||||
for many different things, a good example is permission checks.
|
||||
|
||||
Key Concepts:
|
||||
**wrappers** are used to nest functions in another generalized function, this can be used for various things e.g (logging info)
|
||||
**args** we use the "*args* paramater to capture all positional based arguements, these come before keyword arguements.
|
||||
it sounds more complicated than it is, e.g
|
||||
myfunction(arg1, arg2, arg3)
|
||||
**kwargs** are arguements defined by a key rather than their position. e.g
|
||||
myfunction(keyword1="foo", keyword2="bar")
|
||||
**__name__** is just another magic/dunder method that returns the function's name.
|
||||
"""
|
||||
|
||||
import time
|
||||
|
||||
def timed(function: any) -> any: #initial function takes in another function as a arguement
|
||||
|
||||
def wrapper(*args: any, **kwargs: any) -> any: # the wrapper, takes in the arguements and keyword arguements from the function
|
||||
before = time.time()
|
||||
output = function(*args, **kwargs)
|
||||
after = time.time()
|
||||
print(f"{function.__name__} with output of {output} took {after-before}s to execute.")
|
||||
return output # ensure the output of the function is passed back
|
||||
|
||||
return wrapper
|
||||
|
||||
@timed
|
||||
def exponential_function(n: int) -> int: # O(n^2) time complexity due to nested loops
|
||||
output = 0
|
||||
for i in range(n):
|
||||
for j in range(i):
|
||||
output += j
|
||||
return output
|
||||
|
||||
# Test the decorated function
|
||||
print(exponential_function(1000)) # This will take some time to compute
|
||||
exponential_function(10000) # This will take noticeably more time to compute
|
||||
|
0
5_pandas.py
Normal file
0
5_pandas.py
Normal file
Loading…
Reference in a new issue