Friday, May 11, 2012

Python's handling of default parameter values

Python's handling of default parameter values becomes tricky when one uses a mutable object (e.g., list or dictionary) as a default value.

Default parameter values are evaluated when the function definition is executed. This means that the expression is evaluated once, when the function is defined, and that the same "pre-computed" value is used for each call. If the function modifies the object (e.g. by appending an item to a list), the default value is in effect modified.
This has to be borne in mind when writing recursive Python programs.

Python's splat operator

Python actually has the splat operator (as in Perl or Ruby) that can unpack the arguments out of a list, tuple, or dictionary: func(*args), or func(**kwdargs).