On 15.05.2010 19:18, * Dave:
I've been writing Python for a few years now, and tonight I ran into
something that I didn't understand. I'm hoping someone can explain
this to me. I'm writing a recursive function for generating
dictionaries with keys that consist of all permutations of a certain
set. Here's the function:

<code>
def make_perm(levels, result = {}, key = ''):
        local = key
        if levels == 1:
                for i in ['a', 'b', 'c', 'd']:
                        result [local + i] = ''
        else:
                for i in ['a', 'b', 'c', 'd']:
                        make_perm(levels - 1, result, local + i)
        return result
</code>

I bet this is a FAQ, but I don't know where the FAQ is (probably at 
python.org?).

The defaults for formal parameters are evaluated /once/, namely at function definition time, when the execution first passes through the definition.

And what you're doing is to update that original default 'result' dictionary.

To achieve the effect that you apparently want you can do


  def make_perm( levels, result = None, key = '' )
      if result is None: result = {}  # Evaluated for each call.
      # Blah blah, the rest


There are also other ways.


Cheers & hth.,

- Alf

--
blog at <url: http://alfps.wordpress.com>
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to