Code Explanation:
1. Function Definition
def tricky(val, container={}):
This defines a function named tricky that takes two parameters:
val: a required argument.
container: an optional argument with a default value of an empty dictionary ({}).
Important Concept:
The default value for container is mutable (a dictionary). In Python, default mutable arguments are only evaluated once, at function definition time—not each time the function is called. This is key to the "trick" in this function.
2. Modify the Dictionary
container[val] = True
This line adds a new key-value pair to the dictionary container.
The key is val, and the value is True.
For example, if val = 'a', it adds 'a': True to the dictionary.
3. Return the Dictionary
return container
Returns the updated container dictionary.
4. First Function Call
print(tricky('a'))
The function is called with 'a' as the argument.
Since no second argument is passed, the default dictionary {} is used.
It adds 'a': True to the dictionary.
Returns {'a': True}.
Output:
{'a': True}
5. Second Function Call
print(tricky('b'))
The function is called with 'b' as the argument.
Again, no second argument is passed, so you might expect a fresh dictionary—but:
Python reuses the same default dictionary created during the first function call!
So now 'b': True is added to the same dictionary.
The dictionary now contains {'a': True, 'b': True}.
Output:
{'a': True, 'b': True}


0 Comments:
Post a Comment