Enclosing scope in Python - Time & Space Complexity
Let's explore how the time it takes to run code changes when we use variables from an enclosing scope inside a function.
We want to see how this affects the speed as the input grows.
Analyze the time complexity of the following code snippet.
def multiplier(factor):
def multiply(number):
return number * factor
return multiply
times3 = multiplier(3)
result = times3(10)
This code creates a function that remembers a number from outside and uses it to multiply another number.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: There are no loops or repeated steps here; the multiply function just does one multiplication.
- How many times: The multiplication happens once per call to the inner function.
Explain the growth pattern intuitively.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 multiplications if called 10 times |
| 100 | 100 multiplications if called 100 times |
| 1000 | 1000 multiplications if called 1000 times |
Pattern observation: The time grows directly with how many times you call the inner function, not because of the enclosing scope.
Time Complexity: O(n)
This means the time grows in a straight line with the number of times you use the inner function.
[X] Wrong: "Using variables from outside the function makes the code slower for each call."
[OK] Correct: The inner function just uses the remembered value directly; it doesn't add extra loops or steps, so speed depends on how many times you call it, not on the enclosing scope.
Understanding how functions remember outside values helps you write clear and efficient code, a skill that shows you know how to manage data and speed well.
"What if the inner function had a loop inside it? How would the time complexity change?"