Thinking about Type Checking
A common complaint levied against Python (and other similar languages) is the dynamic nature of its type handling. Dynamic typing makes it difficult to optimize performance because code can’t be compiled in the same way that it is in languages like C or Java. The lack of explicitly stated types can also make it difficult to figure out how the parts of a large application might fit together if you’re simply looking at them in isolation. This difficulty also applies, to tools that might analyze or try to check your program for correctness.