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