Should Python raise a warning for mutable default arguments?

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Sat Aug 23 04:09:19 EDT 2008


On Fri, 22 Aug 2008 20:37:09 -0700, Carl Banks wrote:

> On Aug 22, 10:42 am, Steven D'Aprano <st... at REMOVE-THIS-
> cybersource.com.au> wrote:
>> Sometimes it seems that barely a day goes by without some newbie, or
>> not- so-newbie, getting confused by the behaviour of functions with
>> mutable default arguments. No sooner does one thread finally, and
>> painfully, fade away than another one starts up.
>>
>> I suggest that Python should raise warnings.RuntimeWarning (or
>> similar?) when a function is defined with a default argument consisting
>> of a list, dict or set. (This is not meant as an exhaustive list of all
>> possible mutable types, but as the most common ones that I expect will
>> trip up newbies.) The warning should refer to the relevant FAQ or
>> section in the docs.
>>
>> What do people think?
> 
> -1
> 
> There's nothing questionable about using a mutable default argument, as
> long as you don't mutate it.  

There's nothing questionable about using a mutable default argument, so 
long as you know what behaviour to expect. I too use that behaviour, I 
like that behaviour, and I'm tired of people who want it "fixed".

Nevertheless, it is surprising to many people. My aim is to make it a 
little less surprising.


> Python shouldn't raise a warning just
> because something *might* be due to a misunderstanding.

That's one opinion.

As I've eluded to in an early post, I don't believe Python should refuse 
to perform an operation just because it might be slow. Nevertheless, 
that's precisely what the sum() function does. I'm suggesting a warning 
rather than an exception, but other than that, I suggest that there's 
precedence to what I am suggesting.


-- 
Steven



More information about the Python-list mailing list