If anything, the one thing I hate about Python3 is dynamic typing - inferring datatypes in function bodies is great but strongly typed (and _enforced_) parameters and return values would clean up a lot of the problems I have seen, and created in the past.
High level programming language is meant to communicate, not to dictate the computation. Python happens to be easy to understand by humans.
But to contradict your point, there's also a fair amount of Python which is a dictation - Guido even called his job role 'Benevolent dictator for life'. I really hated some of the guidelines as a new programmer but after dealing with them for some time I understand that consistency is far more important than preference in many/most/all cases.
I primarily work with C#, but I've gradually come to like the "K&R"/Javascript style (where the 1st brace is at the end of the first line), precisely because it helps condense code vertically.
2. can't help with the whitespace, sorry; also take care handling Makefiles
But it doesn't work this way. You don't work strictly with the language itself, you work with the whole ecosystem. Libraries, tools, snippets, SO questions, etc. And many of those are still in 2.7 or at least need to specify different solutions for 2.7... It is still a pain.
Admittedly there were some libraries that took a long time to switch, but at this point there is no serious library left, that did not make the switch.
Python 3.6+ or burn it to the ground
I mself still have to port a few projects yet, but those that got stuck in 2.7-3.5 land are en route to dying a fiery death, and being reborn in 3.6+ (3.8 where applicable, 3.6 as the lowest I'm willing to accept).Makefiles are half the reason I enable visible whitespace in my editors.
e.g.
y=0
for i in range(10):
x=i+1
y=y+x*2
can be written as: [y:=0] + [[x:=i+1, y:y+x*2] for i in range(10)]
The square brackets are the new curly brackets.It's just that no one does it.
And as for curly braces, try typing:
python -c "from __future__ import braces"
In a terminal :)Does for python, too.
Internal encoding: what the strings are encoded in memory (latin1/UCS2/UCS4 in python)
Secondary buffer: python strings can be encoded twice. They can hold a secondary encoded version if themselves as utf-8.
I must say it is a rather elegant way, but it still fits firmly within "a new way or inefficient code".