"jmp" <jeanmic...@sequans.com> a écrit dans le message de news:mailman.213.1475849391.30834.python-l...@python.org...
On 10/07/2016 03:45 PM, ast wrote:

"jmp" <jeanmic...@sequans.com> a écrit dans le message de
news:mailman.210.1475844513.30834.python-l...@python.org...
On 10/07/2016 02:07 PM, ast wrote:

"jmp" <jeanmic...@sequans.com> a écrit dans le message de
news:mailman.209.1475841371.30834.python-l...@python.org...
On 10/07/2016 01:38 PM, Daiyue Weng wrote:


So the rule of thumb for default argument value is "No mutable"

Cheers,


It can be used to store some variables from one call of
a function to an other one.

def test( _store={'x':0}):

    x = _store['x']
    ..... do some stuff
   _store['x'] = x

For personal dirty scripts, possibly, for all other situations, never.

not so dirty in my opinion

You made a point, it's not that dirty, it's an "advanced technique" that is often actually an error when you don't know what you're doing. See the OP's code.

I'm in an environment where people use python as a tool more than an effective powerful language to write complex applications. That's probably why I'm bias on this issue and prefer the cautious approach.

Especially since there's nothing in the code above that cannot be
solved using standard idioms .

Yes, putting _store dictionnary outside

_store={'x':0}

def test( ):

    x = _store['x']
    ..... do some stuff
    _store['x'] = x


or using a global variable, but you pollute in both case
the global scope unnecessary.

What about

def test():
  if not hasattr(test, '_store'): test._store={'x':0}
  test._store['x'] += 1

Neither you pollute the global namespace, nor you pollute the function signature with implementation specifics.

jm


OK

There is this solution too we often see:


def test(x):
.... x = some stuff
.... return(x)

x=0
x = test(x)


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to