I have this Python program that I haven't run in a couple years. I wanted to see if I could make it run faster. Last time, it took 22 hours. Sure enough, using some advanced optimization techniques (and a swig of castor oil), my wife and I were able to run the program in a mere 6.5 hours! Here it is:#!/usr/bin/env python
"""Help Gina-Marie time her contractions."""
SECS_PER_MIN = 60
last_start = None while True: print "Press enter when the contraction starts.", raw_input() start = time.time() if last_start: print "It's been %s minutes %s seconds since last contraction." \ % divmod(int(start - last_start), SECS_PER_MIN) last_start = start print "Press enter when the contraction stops.", raw_input() stop = time.time() print "Contraction lasted %s seconds." % int(stop - start) print
As every Lisp programmer knows, sometimes a lambda (i.e. an anonymous, on-the-fly function) provides just the right amount of indirection you need to solve a problem elegantly. Using a lambda in Python, you can shove an expression into a function, and then call it a little later when the time is right.
I was coding some Python, and I kept ending up with code that looked like:try: count = d['a']['b']['c'] except KeyError: count = 0Translating that little idiom into a function is hard. Every single use of  might result in a KeyError. I could use .get() on each, but that's painful. Similarly, managing a hierarchy of defaultdicts is a bit painful too; the values in my dicts are a mix of ints and other nested dicts.
The question is, how do you put the try / except part into a function, and use d['a']['b']['c'] as an argument? After all, if you call f(d['a']['b']['c']), and d['a']['b']['…
I immediately felt completely overwhelmed. I couldn't even remember what it meant to transpose a matrix, and I definitely hadn't seen anything matrix-related in the book. I went to Wikipedia and figured out that transposing a matrix just means swapping the rows and the columns. That seemed more possible, but I still didn't think I had the necessary tools to code it in Oz yet.
I decided to try solving the problem in Python. Python is sometimes called "executable pseudocode", and sure enough, the solution came to me pretty easily:m = [[1, 2, 3], [4, 5, 6]]
def transpose(m): transposed =  if len(m) >= 1: len_cols = len(m) for col in xrange(len_cols): transposed_row =  for row in m: transposed_row.append(row[col]) transposed.appen…