Static type checking is a technique that allows us to quickly find possible errors and quality defects in code before it is even executed. It's a natural feature of compiled languages with static typing. Python, of course, lacks such built-in features, but there are some third-party packages that allow us to perform static type analysis in Python in order to improve code quality. Function and variable annotations are currently best utilized as type hints for the exact purpose of static type checking. The leading type of static checker for Python is currently mypy. It analyzes functions and variable annotations that can be defined using a type hinting hierarchy from typing modules (refer to PEP 484 Type Hints).
The best thing about mypy is that type hinting is completely optional. If you have a very large codebase, you are not forced to suddenly annotate all your code before you start to reap benefits from the static type checking. You can just start to gradually introduce type annotation in the most used code and get increasing benefits over time as your type annotations coverage increases. Also, mypy is supported by mainstream Python development in the form of a typeshed project. Typeshed (see https://github.com/python/typeshed) is a collection of library stubs with static type definitions for both the standard library and many popular third=party projects.
You'll find more information about mypy and its command-line usage on the official project page at http://mypy-lang.org.
Let's look at some of the other syntax elements you may not know of yet.