A pretty thorough overview of improvements to Python 3.x versions is contained in the series of “What’s new in Python N.m" documents. Each document focuses on the improvements that were made since the prior minor version, rather than globally what’s new in the history of Python.
Here are some highlights of new capabilities, somewhat subjectively listed because this writer finds them interesting or important. Lots of worthwhile features and modules did not make the cut for discussion in this paper.
In Python 3.x, the
str type is always Unicode (with efficient encoding
strategies for strings in recent Python 3.x versions, based on the specific
code points occuring within strings). There are far too many intricacies
to the correct handling of all the characters in all the world (thoughout
the history of human language, moreover) within the same program, with
many semantic nuances of directionality, character composition, the
Basic Multilingual Plane versus Supplementary Planes, code surrogates,
canonicalization, and on and on, to discuss in this paper.
Let it suffice for the quick summary to say that recent versions of Python 3.x versions get all these details correct and make them usable. That is not to say that multilingual programming is easy, but Python 3.x gets ...