##
4.7.1 Default Argument Values

The most useful form is to specify a default value for one or more arguments. This creates a function that can be called with fewer arguments than it is defined, e.g.

      def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
          while 1:
              ok = raw_input(prompt)
              if ok in ('y', 'ye', 'yes'): return 1
              if ok in ('n', 'no', 'nop', 'nope'): return 0
              retries = retries - 1
              if retries < 0: raise IOError, 'refusenik user'
              print complaint

This function can be called either like this: `ask_ok('Do you really want to quit?')` or like this: `ask_ok('OK to overwrite the file?', 2)`.

The default values are evaluated at the point of function definition in the defining scope, so that e.g.

      i = 5
      def f(arg = i): print arg
      i = 6
      f()

will print `5`.

Important warning: The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list or dictionary. For example, the following function accumulates the arguments passed to it on subsequent calls:

      def f(a, l = []):
          l.append(a)
          return l
      print f(1)
      print f(2)
      print f(3)

This will print

      [1]
      [1, 2]
      [1, 2, 3]

If you don't want the default to be shared between subsequent calls, you can write the function like this instead:

      def f(a, l = None):
          if l is None:
              l = []
          l.append(a)
          return l