python 3 deep dive part 4