python 3 deep dive part 3