Peter Norvig's 27 line spell checker
The short circuiting `or` chain is also pleasantly virtuosic. Sometimes a little flashiness is tolerable when it works this well!
You're saying python computes an expression that's part of a default value when the code defining the function is run? I guess it makes sense now that i say it, I wouldn't have automatically assumed that. That's an interesting one to remember.
>>> def function(b, a=[]):
... a.append(b)
... print(a)
...
...
>>> function(1)
[1]
>>> function(2)
[1, 2]
>>> function(3, [4])
[4, 3]
>>> function(5)
[1, 2, 5]
A correct implementation would be: >>> def function2(b, a=None):
... if a is None: a = []
... a.append(b)
... print(a) >>> def func(b, a=list()):
... a.append(b)
... print(a)
...
>>> func(3)
[3]
>>> func(3)
[3, 3]
Honestly surprised this quirk hasn't bit me yetdef foobar(my_list=[]): my_list.append(42)
A cursory glance suggests this function appends a number to an empty list every time it's run. But actually, the default argument is evaluated once when the function is defined, so calling this function repeatedly will continue to append to that same list.