Bird
Raised Fist0
Data Analysis Pythondata~20 mins

Profiling with line_profiler in Data Analysis Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Profiling Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
1:30remaining
Output of line_profiler on a simple function
Given the following Python function and its profiling using line_profiler, what is the total time spent on line 4?
Data Analysis Python
def compute_sum(n):
    total = 0
    for i in range(n):
        total += i
    return total

# Assume line_profiler output shows line 4 took 0.0005 seconds
A0.00005 seconds
B0.05 seconds
C0.0005 seconds
D0.005 seconds
Attempts:
2 left
💡 Hint
Look at the profiler output for the line inside the loop where addition happens.
❓ data_output
intermediate
1:30remaining
Interpreting line_profiler output table
You ran line_profiler on a function and got this snippet of output for line 6: Hits=1000, Time=0.002 seconds, Per Hit=0.000002 seconds. How many times was line 6 executed?
A1000 times
B2000 times
C500 times
DCannot be determined
Attempts:
2 left
💡 Hint
Hits means how many times the line was run.
🔧 Debug
advanced
2:00remaining
Why does line_profiler show zero time for a line?
You profile a function with line_profiler but one line inside a loop shows zero time. What is the most likely reason?
Data Analysis Python
def fast_func():
    for i in range(10000):
        pass  # line 3

# line_profiler shows line 3 took 0 seconds
AThe line is too fast to measure and rounds to zero
Bline_profiler skipped that line due to a bug
CThe line was never executed
DThe function was not decorated with @profile
Attempts:
2 left
💡 Hint
Consider how line_profiler measures time and very fast lines.
🚀 Application
advanced
2:00remaining
Optimizing code based on line_profiler results
You profile a function and find that line 10 takes 80% of the total time. What is the best next step to improve performance?
AOptimize lines that take less than 5% time first
BFocus optimization efforts on line 10
CAdd more print statements to line 10
DIgnore line 10 and optimize the whole function equally
Attempts:
2 left
💡 Hint
Where does most time spent mean for optimization?
🧠 Conceptual
expert
2:30remaining
Understanding line_profiler limitations
Which of the following is NOT a limitation of line_profiler?
AIt cannot profile built-in C functions
BIt requires decorating functions with @profile
CIt adds overhead and slows down the program
DIt provides exact CPU cycle counts per line
Attempts:
2 left
💡 Hint
Think about what line_profiler measures and what it does not.

Practice

(1/5)
1. What is the main purpose of using line_profiler in Python data analysis?
easy
A. To measure the time each line of a function takes to execute
B. To visualize data distributions with graphs
C. To clean missing data automatically
D. To convert data types in a DataFrame

Solution

  1. Step 1: Understand profiling purpose

    line_profiler is designed to measure execution time per line in functions.
  2. Step 2: Compare options to profiling goal

    Options A, B, and D relate to data cleaning, visualization, and type conversion, not profiling.
  3. Final Answer:

    To measure the time each line of a function takes to execute -> Option A
  4. Quick Check:

    Profiling = measuring line execution time [OK]
Hint: Profiling finds slow lines by timing code line-by-line [OK]
Common Mistakes:
  • Confusing profiling with data visualization
  • Thinking profiling cleans or transforms data
  • Assuming profiling measures overall script time only
2. Which of the following is the correct way to create a LineProfiler object and add a function my_func for profiling?
easy
A. profiler = LineProfiler(my_func); profiler.run()
B. profiler = LineProfiler(); profiler.add_function('my_func')
C. profiler = LineProfiler(); profiler.add(my_func)
D. profiler = LineProfiler(); profiler.add_function(my_func)

Solution

  1. Step 1: Recall LineProfiler usage

    The correct method to add a function is add_function() with the function object.
  2. Step 2: Check each option

    profiler = LineProfiler(); profiler.add_function(my_func) uses add_function(my_func) correctly. profiler = LineProfiler(my_func); profiler.run() wrongly passes function to constructor. profiler = LineProfiler(); profiler.add(my_func) uses non-existent add(). profiler = LineProfiler(); profiler.add_function('my_func') passes function name as string, which is incorrect.
  3. Final Answer:

    profiler = LineProfiler(); profiler.add_function(my_func) -> Option D
  4. Quick Check:

    Add function with add_function(func) [OK]
Hint: Use add_function(func) with function object, not string [OK]
Common Mistakes:
  • Passing function name as string instead of function object
  • Using wrong method like add() instead of add_function()
  • Passing function to LineProfiler constructor
3. Given the code below, what will be printed by profiler.print_stats()?
from line_profiler import LineProfiler

def slow_func():
    total = 0
    for i in range(3):
        total += i
    return total

profiler = LineProfiler()
profiler.add_function(slow_func)
profiler.enable()
slow_func()
profiler.disable()
profiler.print_stats()
medium
A. No output because profiler.enable() was called before add_function()
B. SyntaxError because LineProfiler requires run() method
C. Detailed timing per line of slow_func showing time spent on the loop lines
D. Only total execution time without line-by-line details

Solution

  1. Step 1: Understand profiling flow

    Profiler is created, function added, enabled, function called, then disabled and stats printed.
  2. Step 2: Analyze output of print_stats()

    print_stats() shows detailed line-by-line timing for added functions, here slow_func, including loop lines.
  3. Final Answer:

    Detailed timing per line of slow_func showing time spent on the loop lines -> Option C
  4. Quick Check:

    print_stats() = detailed line timing [OK]
Hint: print_stats() shows line-by-line timing for added functions [OK]
Common Mistakes:
  • Thinking print_stats() shows only total time
  • Believing enable() must be after add_function() to work
  • Confusing run() method requirement
4. Identify the error in the following code snippet that uses line_profiler:
from line_profiler import LineProfiler

def compute():
    s = 0
    for i in range(5):
        s += i
    return s

profiler = LineProfiler()
profiler.add_function('compute')
profiler.enable()
compute()
profiler.disable()
profiler.print_stats()
medium
A. Passing function name as string to add_function instead of function object
B. Missing call to profiler.run() to execute the function
C. Not importing line_profiler correctly
D. For loop range is invalid syntax

Solution

  1. Step 1: Check add_function argument

    add_function requires the function object, not its name as a string.
  2. Step 2: Identify error cause

    Passing 'compute' as string causes profiler not to track the function properly.
  3. Final Answer:

    Passing function name as string to add_function instead of function object -> Option A
  4. Quick Check:

    add_function(func) needs function object [OK]
Hint: Always pass function object, not string, to add_function() [OK]
Common Mistakes:
  • Passing function name as string
  • Thinking profiler.run() is mandatory
  • Assuming import error without checking code
5. You want to profile two functions func_a and func_b in your data analysis script. You also want to compare which function is slower line-by-line. Which of the following code snippets correctly profiles both functions and prints their stats separately?
hard
A. profiler = LineProfiler() profiler.add_function(func_a) profiler.add_function(func_b) profiler.enable() func_a() func_b() profiler.disable() profiler.print_stats()
B. profiler_a = LineProfiler() profiler_a.add_function(func_a) profiler_b = LineProfiler() profiler_b.add_function(func_b) profiler_a.enable() func_a() profiler_a.disable() profiler_b.enable() func_b() profiler_b.disable() profiler_a.print_stats() profiler_b.print_stats()
C. profiler = LineProfiler(func_a, func_b) profiler.run() profiler.print_stats()
D. profiler = LineProfiler() profiler.add_function('func_a') profiler.add_function('func_b') profiler.enable() func_a() func_b() profiler.disable() profiler.print_stats()

Solution

  1. Step 1: Understand profiling multiple functions separately

    To compare functions separately, create separate LineProfiler instances for each.
  2. Step 2: Analyze each option

    profiler = LineProfiler() profiler.add_function(func_a) profiler.add_function(func_b) profiler.enable() func_a() func_b() profiler.disable() profiler.print_stats() profiles both with one profiler but prints combined stats, not separate. profiler_a = LineProfiler() profiler_a.add_function(func_a) profiler_b = LineProfiler() profiler_b.add_function(func_b) profiler_a.enable() func_a() profiler_a.disable() profiler_b.enable() func_b() profiler_b.disable() profiler_a.print_stats() profiler_b.print_stats() profiles separately with two profilers and prints stats separately. profiler = LineProfiler(func_a, func_b) profiler.run() profiler.print_stats() wrongly passes functions to constructor and calls run() without arguments. profiler = LineProfiler() profiler.add_function('func_a') profiler.add_function('func_b') profiler.enable() func_a() func_b() profiler.disable() profiler.print_stats() passes function names as strings, which is incorrect.
  3. Final Answer:

    profiler_a = LineProfiler() profiler_a.add_function(func_a) profiler_b = LineProfiler() profiler_b.add_function(func_b) profiler_a.enable() func_a() profiler_a.disable() profiler_b.enable() func_b() profiler_b.disable() profiler_a.print_stats() profiler_b.print_stats() -> Option B
  4. Quick Check:

    Separate profilers for separate stats [OK]
Hint: Use separate LineProfiler instances to profile functions separately [OK]
Common Mistakes:
  • Passing function names as strings
  • Using one profiler for separate stats
  • Misusing LineProfiler constructor arguments
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard