Advanced Python functions by Reuven M. Lerner