Benchmarking Functions with Python Decorators

1 hour
  • 2 Learning Objectives

About this Hands-on Lab

Decorators are just syntactic sugar, but they are one of the most interesting features of Python. Being able to add functionality or features to existing functions and classes without modifying the original source can be incredibly valuable and allows for leveraging code reuse in a way that many object-oriented languages simply can’t. In this hands-on lab, you’ll be writing decorator functions that allows for adding benchmarking and logging to functions, with an option for passing in a file name to log to. Completing this lab will demonstrate that you know how to write and utilize function decorators in Python.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Implement the log Decorator

The log decorator needs to print (or write to a file) a line in the following format:

running: [wrapped_function_name] args: [positional_arguments] kwargs: [keyword_arguments]

The function should allow for an optional file_name argument so that it can be used like this:

@log(file_name="log_file.txt")
def some_functions(a, b):
    pass
Implement the benchmark Decorator

The benchmark decorator needs to print (or write to a file) a line in the following format:

benchmark: [wrapped_function_name] duration: [total_runtime_in_seconds]

The function should allow for an optional file_name argument so that it can be used like this:

@benchmark(file_name="benchmarks.txt")
def some_functions(a, b):
    pass

Additional Resources

As you and your team have been working on your internal applications, you've found yourself wanting to be able to quickly benchmark and add logging to a function to help in your debugging. Your team has decided that they'd like to have a library of decorators that they can easily pull in to add logging and benchmarking to a function temporarily without needing to actually modify the function. You've been tasked with building these decorators.

Here are the decorators that you need to build and their requirements.

  • benchmark - Will note the start time and completion time of the wrapped function and print (or write to a file) the following line when the function is called:
benchmark: [wrapped_function_name] duration: [total_runtime_in_seconds]
  • log - Simply prints (or writes to a file) the message when the function is called.
running: [wrapped_function_name], args: [positional_arguments], kwargs: [keyword_arguments]

For both of these decorators, you should be able to provide file_name as an optional keyword argument to state the file that the benchmark or log lines should be written.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?