Self taught Python (and using linux OS) over the last 15 years ; the only ways I found real progress in my code/coding were while doing the following : 1/ (at start): following strictly a "school manual" with lessons and ALL exercices. It was Python 2.3 I think, a manual (in French) by Swinnen. To be honest I stopped before reaching the GUI and network programming, and guess at what I suck today in Python programming ... 2/ projects, personal projects. I did pro (paid) projects on the side, but with the impetuous to deliver results to be paid, I can not progress. On personal projects I can take the time to try stuff, to rewrite functions or programs, and to "improve" existing code with new/better coding constructs.
So here I am with a rather random level of Python programming proficiency, currently being average at most but enough proficient to have workable programs.