[Python-3000] default argument surprises

Chris Rebert cvrebert at gmail.com
Wed Aug 27 07:39:00 CEST 2008


On Tue, Aug 26, 2008 at 8:31 PM, Chris Rebert <cvrebert at gmail.com> wrote:
> You might then be interested in the following related discussions from
> last year wherein I proposed something extremely similar:
>
> [Python-ideas] proto-PEP: Fixing Non-constant Default Arguments
> http://mail.python.org/pipermail/python-ideas/2007-January/000121.html
>
> [Python-3000] pre-PEP: Default Argument Expressions
> http://mail.python.org/pipermail/python-3000/2007-February/005712.html

I apologize, this second link should have been to
http://mail.python.org/pipermail/python-3000/2007-February/005704.html
- Chris

>
> The proposal was rejected by the BDFL (for being too magical) before
> it had become a full-fledged PEP.
>
> - Chris
>
>
> On Tue, Aug 26, 2008 at 8:21 PM, Sam Bishop <samuel.j.bishop at gmail.com> wrote:
>> Hi, all.
>>
>> I know that Python 3.0 is quite a ways along, but I'd like to make two
>> small suggestions with regards to how the language works.  (I would
>> have spoken up earlier, except that I'm very new to Python.)
>>
>> I've talked to a few of my co-workers who are also new to Python, and
>> we've all been surprised at the way code like this behaves:
>>
>> :def process(L=[]):
>> :    # 'x' always needs processed...
>> :    L += ['x']
>> :    print L
>> :
>> :process()  # prints "['x']"
>> :process()  # prints "['x', 'x']"!
>>
>> We've been able to figure out what's happening, but it seems counter-intuitive.
>>
>> If Python were changed so that default-argument, rvalue objects were
>> recreated each time a function is invoked, I think that it would be
>> intuitive (and efficient) if the object were only created when
>> necessary.  Here's (approximately) another code snippet I've seen
>> recently:
>>
>> :def determine_default():
>> :    print "Why is this code executing?"
>> :    return 1
>> :
>> :def fun(arg=determine_default()):
>> :    pass
>> :
>> :fun("value")
>>
>> Thanks,
>> Sam
>> _______________________________________________
>> Python-3000 mailing list
>> Python-3000 at python.org
>> http://mail.python.org/mailman/listinfo/python-3000
>> Unsubscribe: http://mail.python.org/mailman/options/python-3000/cvrebert%40gmail.com
>>
>


More information about the Python-3000 mailing list