Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #48936

Re: Default Value

From Rotwang <sg552@hotmail.co.uk>
Newsgroups comp.lang.python
Subject Re: Default Value
Date 2013-06-22 18:19 +0100
Organization A noiseless patient Spider
Message-ID <kq4m1f$dg0$1@dont-email.me> (permalink)
References (8 earlier) <kq23at$i39$1@dont-email.me> <7e1ed740-df18-4978-b11d-8ca9c4b5bd04@googlegroups.com> <kq2o0k$vng$1@dont-email.me> <46567a60-bb75-4f22-b968-bf3ccbf35afb@googlegroups.com> <kq308b$1ll$1@dont-email.me>

Show all headers | View raw


On 22/06/2013 03:01, I wrote:
> On 22/06/2013 02:15, Rick Johnson wrote:
>> [...]
>>
>> This is what should happen:
>>
>>      py> def foo(arg=[]):
>>      ...     arg.append(1)
>>      ...     print(arg)
>>      ...
>>      py> foo()
>>      [1]
>>      py> foo()
>>      [1]
>>      py> foo()
>>      [1]
>>
>> Yes, Yes, YES! That is intuitive! That is sane! Now, what if
>> we pass a reference to a mutable object? What then. Well, let's
>> see:
>>
>>      py> lst = range(5)
>>      py> lst
>>      [0, 1, 2, 3, 4]
>>      py> def foo(arg=lst):
>>      ...     arg.append(1)
>>      ...     print(arg)
>>      ...
>>      py> foo()
>>      [0, 1, 2, 3, 4, 1]
>>      py> foo()
>>      [0, 1, 2, 3, 4, 1, 1]
>>
>> That's fine. Because the object was already created OUTSIDE
>> the subroutine. So therefore, modifications to the mutable
>> are not breaking the fundamental of statelessness INSIDE
>> subroutines. The modification is merely a side effect, and
>> the subroutine is unconcerned with anything that exists
>> beyond it's own scope.
>>
>> IS ALL THIS REGISTERING YET? DO YOU UNDERSTAND?
>
> No, I don't. These two special cases are not sufficient for me to
> determine what semantics you are proposing for the general case. For
> example, what happens in the second example if lst is rebound? Does the
> default stay the same or does it change to the new value of lst? What
> about if you pass a call as a default argument, and then subsequently
> change the behaviour of the callable? Does the argument get re-evaluated
> every time foo() is called, or is the argument guaranteed to be the same
> every time? If the latter, what happens if the arguments type is
> modified (e.g. by changing one of its class attributes)? What about
> defining functions dynamically, with default arguments that are only
> known at runtime? Is there any way to avoid the second type of behaviour
> in this case? If so, how? If not, isn't that likely to prove at least as
> big a gotcha to people who don't know the rules of RickPy as the problem
> you're trying to solve?

Since you haven't answered this, allow me to suggest something. One 
thing that a language could do is treat default arguments as mini 
function definitions with their own scope, which would be the same as 
the scope of the function itself but without the function's arguments. 
In other words, in this alternative version of Python, the following

 >>> def f(x = <expression>):
...    <stuff>

would be equivalent, in actual Python, to this:

 >>> default = lambda: <expression>
 >>> sentinel = object()
 >>> def f(x = sentinel):
...    if x is sentinel:
...        x = default()
...    <stuff>

That would be something that could be implemented, and as far as I can 
tell it's consistent with the examples you've given of how you would 
like Python to work. Is this indeed the kind of thing you have in mind?

Back to comp.lang.python | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Default Value Ahmed Abdulshafy <abdulshafy@gmail.com> - 2013-06-19 12:17 -0700
  Re: Default Value Jussi Piitulainen <jpiitula@ling.helsinki.fi> - 2013-06-19 22:35 +0300
  Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-19 12:38 -0700
    Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-20 05:57 -0700
      Re: Default Value Roy Smith <roy@panix.com> - 2013-06-20 09:19 -0400
        Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-20 06:31 -0700
        Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 00:17 +0000
          Re: Default Value Roy Smith <roy@panix.com> - 2013-06-20 20:25 -0400
      Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-20 07:49 -0700
        Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-21 01:38 +1000
          Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-20 11:05 -0700
            Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 00:57 +0000
              Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-20 20:16 -0700
                Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-21 17:10 +1000
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 07:32 -0700
                Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 16:22 +0000
            Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 15:57 +0000
              Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 10:01 -0700
                Re: Default Value Rotwang <sg552@hotmail.co.uk> - 2013-06-21 18:47 +0100
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 11:26 -0700
                Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 18:37 +0000
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 12:18 -0700
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 12:35 -0700
                Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-22 05:07 +1000
                Re: Default Value Neil Cerutti <neilc@norwich.edu> - 2013-06-21 19:20 +0000
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 13:27 -0700
                Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-22 01:31 +0000
                Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-22 11:40 +1000
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 18:42 -0700
                Re: Default Value MRAB <python@mrabarnett.plus.com> - 2013-06-22 03:04 +0100
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 19:32 -0700
                Re: Default Value MRAB <python@mrabarnett.plus.com> - 2013-06-22 20:36 +0100
                Re: Default Value Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2013-06-22 18:51 -0400
                Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-21 19:43 -0700
                Re: Default Value Mark Lawrence <breamoreboy@yahoo.co.uk> - 2013-06-22 09:26 +0100
                Re: Default Value MRAB <python@mrabarnett.plus.com> - 2013-06-21 20:25 +0100
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 13:44 -0700
                Re: Default Value MRAB <python@mrabarnett.plus.com> - 2013-06-21 23:49 +0100
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 16:51 -0700
                Re: Default Value MRAB <python@mrabarnett.plus.com> - 2013-06-22 02:54 +0100
                Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-22 01:15 +0000
                Re: Default Value Ian Kelly <ian.g.kelly@gmail.com> - 2013-06-21 19:27 -0600
                Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-21 19:32 -0700
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 19:55 -0700
                Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-21 23:23 -0700
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-22 08:07 -0700
                Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-22 08:31 -0700
                Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-22 09:11 -0700
                Re: Default Value Grant Edwards <invalid@invalid.invalid> - 2013-06-24 14:22 +0000
                Re: [SPAM] Re: Default Value MRAB <python@mrabarnett.plus.com> - 2013-06-24 16:22 +0100
                Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-22 11:41 +1000
                Re: Default Value Michael Torrie <torriem@gmail.com> - 2013-06-21 20:46 -0600
                Re: Default Value Antoon Pardon <antoon.pardon@rece.vub.ac.be> - 2013-06-22 16:40 +0200
                Re: Default Value Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2013-06-22 12:49 -0400
                Re: Default Value Ian Kelly <ian.g.kelly@gmail.com> - 2013-06-22 12:57 -0600
                Re: Default Value Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2013-06-22 18:48 -0400
                Re: Default Value Rotwang <sg552@hotmail.co.uk> - 2013-06-22 00:40 +0100
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 18:15 -0700
                Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-22 11:37 +1000
                Re: Default Value Ian Kelly <ian.g.kelly@gmail.com> - 2013-06-21 19:42 -0600
                Re: Default Value Ian Kelly <ian.g.kelly@gmail.com> - 2013-06-21 19:38 -0600
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 19:40 -0700
                Re: Default Value Rotwang <sg552@hotmail.co.uk> - 2013-06-22 03:01 +0100
                Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-22 12:18 +1000
                Re: Default Value Rotwang <sg552@hotmail.co.uk> - 2013-06-22 03:25 +0100
                Re: Default Value Rotwang <sg552@hotmail.co.uk> - 2013-06-22 18:19 +0100
                Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-22 11:49 -0700
                Re: Default Value Rotwang <sg552@hotmail.co.uk> - 2013-06-23 01:49 +0100
        Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-20 10:12 -0700
          Re: Default Value Chris Angelico <rosuav@gmail.com> - 2013-06-21 03:19 +1000
            Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-20 10:30 -0700
          Re: Default Value Ian Kelly <ian.g.kelly@gmail.com> - 2013-06-20 11:57 -0600
            Re: Default Value rusi <rustompmody@gmail.com> - 2013-06-20 11:15 -0700
            Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 01:08 +0000
              Re: Default Value Tim Chase <python.list@tim.thechases.com> - 2013-06-20 20:26 -0500
                Re: Default Value Roy Smith <roy@panix.com> - 2013-06-20 21:40 -0400
                Re: Default Value Tim Chase <python.list@tim.thechases.com> - 2013-06-20 21:02 -0500
          Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-20 11:07 -0700
            Re: Default Value alex23 <wuwei23@gmail.com> - 2013-06-21 10:55 +1000
          Re: Default Value 88888 Dihedral <dihedral88888@gmail.com> - 2013-06-20 19:18 -0700
          Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 02:26 +0000
          Re: Default Value "Lefavor, Matthew (GSFC-582.0)[MICROTEL LLC]" <matthew.lefavor@nasa.gov> - 2013-06-20 17:28 -0500
            Re: Default Value Rick Johnson <rantingrickjohnson@gmail.com> - 2013-06-21 08:17 -0700
        Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-21 01:28 +0000
  Re: Default Value Gary Herron <gherron@digipen.edu> - 2013-06-19 12:57 -0700
  Re: Default Value Steven D'Aprano <steve+comp.lang.python@pearwood.info> - 2013-06-20 01:17 +0000

csiph-web