What is the expected output?
MathWorks technical mcq question, verified with a worked answer. Free to practise - no sign-up.
What is the expected output?
def foo(i, x=[]):
x.append(x.append(i))
return x
for i in range(3):
y = foo(i)
print(y)
Pick ONE option
Show answer & explanation
Answer: A. [0, None, 1, None, 2, None]
The mutable default argument x=[] persists across function calls. Each iteration, x.append(i) appends the value and returns None, which is then appended to x. After 3 iterations, the list contains alternating values and None entries: [0, None, 1, None, 2, None]. The list is shared across all calls because default arguments are evaluated once at function definition time.
Step-by-step Derivation:
Trace execution:
Iteration 1 (i=0):
- x.append(0) executes, appends 0 to x, returns None
- x.append(None) executes, appends None to x, returns None
- x = [0, None]
Iteration 2 (i=1):
- x persists as [0, None] (mutable default argument)
- x.append(1) executes, appends 1 to x, returns None
- x.append(None) executes, appends None to x, returns None
- x = [0, None, 1, None]
Iteration 3 (i=2):
- x persists as [0, None, 1, None]
- x.append(2) executes, appends 2 to x, returns None
- x.append(None) executes, appends None to x, returns None
- x = [0, None, 1, None, 2, None]
Final output: [0, None, 1, None, 2, None]