Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Challenge: Create Your First Python Decorator | Mastering Python Decorators
Intermediate Python Techniques

book
Challenge: Create Your First Python Decorator

Tarea

Swipe to start coding

Sometimes, it's necessary to measure how long a particular function or code segment takes to execute. This can be achieved by calculating the time elapsed from the start to the end of the function. However, if you need to measure the execution time of multiple functions, a more efficient approach would be to write a single decorator and apply it to these functions.

We'll develop such a decorator and see its effectiveness:

  1. You need to define the parameters that the wrapper will accept;
  2. Call the func function with the arguments *args and **kwargs, and assign it to the result variable;
  3. In the line return ___, you should return result;
  4. Complete the decorator by returning the wrapper function;
  5. Applies the time_it decorator to the factorial function;
  6. Calls the factorial function (which is now decorated with time_it) and prints its return value.

Solución

import time

# Step 2: Define the decorator
def time_it(func):
def wrapper(*args, **kwargs):
start_time = time.time() # Start time
result = func(*args, **kwargs) # Call the function
end_time = time.time() # End time
print(f"{func.__name__} took {end_time - start_time} seconds")
return result
return wrapper

# Step 4: Apply the decorator
@time_it
def factorial(n):
"""Function to compute factorial of a number"""
return 1 if n == 0 else n * factorial(n - 1)

# Step 5: Test the decorator
print(factorial(10)) # Replace with any number to test

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 5. Capítulo 3
import time

# Step 2: Define the decorator
def time_it(func):
def wrapper(___, ___):
start_time = time.time() # Start time
result = ___(*args, **kwargs) # Call the function
end_time = time.time() # End time
print(f"{func.__name__} took {end_time - start_time} seconds")
return ___
return ___

# Step 4: Apply the decorator
@___
def factorial(n):
"""Function to compute factorial of a number"""
return 1 if n == 0 else n * factorial(n - 1)

# Step 5: Test the decorator
print(___(10)) # Replace with any number to test

Pregunte a AI

expand
ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

some-alt