title: python default parameter value using datetime
body: <p>I have a simple Python script that uses a signal handler for Ctl-C.  If the program completes normally, the end time is passed into the "print_results" function.  I wanted the print_results function to have an optional parameter that, if not passed, simply gets the current "now" time.  But when I call it from the signal handler, it does not get the correct time.</p>
  
  <p>Here is my simplified, but reproducible, program:</p>
  
  <pre><code>import sys
  import signal
  import urllib2
  import urllib
  import datetime
  import time
  import getopt,sys
  
  def signal_handler(signal, frame):
      print_results()
      sys.exit(0)
  
  def print_results(ended=datetime.datetime.now()):
      print "\nEnded at ",ended
      print "Total time: ",(ended - startTime)
      print "Finished ",numIterations," iterations, received ",totalRecords," records"
  
      numIterations = 0
      maxIterations = 8
      delaySecs = 3
      totalRecords = 0
  
      # set up signal handler
      signal.signal(signal.SIGINT, signal_handler)
  
      startTime = datetime.datetime.now()
  
      print "Starting at ",time.asctime(time.localtime())
  
      while (numIterations &lt; maxIterations):
  
          iterStartTime = datetime.datetime.now()
  
          numIterations += 1
  
          print "Iteration: ",numIterations
  
          # sleep if necessary
  
          if delaySecs &gt; 0:
              time.sleep(delaySecs)
  
          iterEndTime = datetime.datetime.now()
  
          print "Iteration time: ",(iterEndTime - iterStartTime)
  
      endTime = datetime.datetime.now()
  
      print "Ended at ",time.asctime(time.localtime())
      print "Total test time: ",(endTime - startTime)
  
      print_results(endTime)
  </code></pre>
  
  <p>Here is what happens when I type Ctl-C</p>
  
  <pre><code>$ python test.py                                                           
  Starting at  Fri Jun 15 08:28:15 2012
  Iteration:  1
  Iteration time:  0:00:03.003101
  Iteration:  2
  Iteration time:  0:00:03.003105
  Iteration:  3
  ^C
  Ended at  2012-06-15 08:28:15.766496
  Total time:  -1 day, 23:59:59.999964
  Finished  3  iterations, received  0  records
  </code></pre>
  
  <p>It seems like that when print_results is called with no arguments that the 'ended'
  value is not being interpreted correctly as a datetime object.  But since Python
  does not have a way to cast (as far as I can tell), I cannot tell what is wrong.</p>
  
  <p>Thanks in advance,</p>
  
  <p>Mitch</p>