Python Advanced (7.9.2020 - 10.9.2020)¶
This is a training for a team which is already experienced in Python programming. There were some special requirements for the training, such as to loose a couple of words about AI/machinelearning and other topics, as well as a fuzzy “bring us advanced stuff”.
Python is easy; one can solve nontrivial problems in only a few lines of code, in no time. This does not mean that you have to fully understand the language - which is good because this is what makes the language easy.
On the other hand, there’s always a line to cross where you wish you knew more. Here the more advanced core Python topics that shall be covered.
Unit Testing, Test Driven Development, Design Patterns
Web programming with Jango and/or Flask
Following is a recap of what has happened. File names are relative to the root of the Github repository we were working from.
Rushed through basics,
Put a strong focus on Python features,
Livehacking: Iteration, Comprehensions, and Generators, covering
Writing generators using
self, etc. (
selfcan also read
private, pros and cons
insert one step without
abcbefore it, and then show what
explain “check errors as early as can” ⟶ at ctor time, rather than at method call time.
Livehacking design patterns
joerg-livehacking/composite.py. Using the thermometer hierarchy, a “composite” thermometer was created. That thermometer uses (has) a set of concrete thermometers to calculate the average room temperature.
joerg-livehacking/adapter.py. Fictional scenario …
Unserthermometer framework contains a number of thermometer implementations which all support the
A collaboration with a competitor is launched. That competitor has a similar set of thermometer implementations. The difference between
Eanathermometers do not support
get_temperature_celsius(), but rather only
We employ the adapter pattern and create one special thermometer in the
class EanaAdapter(UnserThermometer): ...
Revisit abstract base classes
Discuss duck typing.
abcshifts duck errors from call to initialization
joerg-livehacking/visitor.py. Classic OO implementation of the visitor pattern as a DFS traversal. Together with callbacks and all convolutions. Took sideways like,
__call__makes a class callable.
__repr__work together in
joerg-livehacking/visitor-generator.py. “I don’t want to implement a visitor!”, poor user says. “I only want to iterate over the tree in DFS order!”
Implement DFS iteration using
yield fromwhich delegates iteration into recursion.
TDD and Unit Testing theory; using excerpts from the
Design Patternsdeck of slides. Explain terminology; fixtures and such.
Start hacking on project. Agreed upon myself doing live hacking. Doing TDD.
Project/tests/sensordata_tests.py. Prepare TDD; explain suites, cases, fixture, assertions.
While writing data classes (holding only attributes and no functionality), explain
namedtuple. Use that to implement
Slowly fix things, in a test driven way. Discuss, team giving input, all really fine.
Decorators theory, and livehacking. Mainly to see how flask routes work.
Continue project; add CSV import.
Flask frontend, reading
We couldn’t cover everything we would have liked to. Here is a random list of tutorial to watch in quiet moments.
Transforming Code into Beautiful, Idiomatic Python. Raymond Hettinger, reiterating his favorite phrase: “There must be a better way”. (Hettinger is a “Python Core Developer”.)
Python Tutorial: Duck Typing and Asking Forgiveness, Not Permission (EAFP). Corey Schafer about Duck Typing, and the word Pythonic. Corey Schafer has a number of very good Tutorials; he manages to keep those short and to the point, and rarely exceeds 15 minutes.
Python Tutorial: Unit Testing Your Code with the unittest Module. Our project was guided by unit tests; here’s Corey Schafer about the
Python Tutorial: Decorators - Dynamically Alter The Functionality Of Your Functions. Corey Schafer about decorators. Mine was better :-)
Built in Super Heroes. David Beazley in an entertaining keynote to the “PyData Chicago 2016” conference. He has a number of very good and entertaining (and very advanced) videos. You have to spend an entire evening with him though.
Concurrency: Raymond Hettinger covering most if not all aspects and possiblities of concurrency. Very informative, very concise, covering
Async; I didn’t even mention that. asyncio. Me big fan.
Understanding the Python GIL: David Beazley dissecting the Global Interpreter Lock, explaining why multiprocessing is better. At around minute 45, in the questions/answers, there a mention that using NumPy operations in multiple threads is truly parallel.
Modules and Packages. David Beazley has a three hour (!) really cool and in-depth look into the seemingly simple
Virtual Environments Tutorial: Corey Schafer again. Virtual environments are kind of an isolated development sandbox, solving a similar problem as containers do, but much more lightweight and Python only.
Packaging, Deployment, PyPI, and pip: Chris Wilcox (of Google) talking about packaging and deployment, and related topics
Generators: The Final Frontier: David Beazley, again a bit (a whopping four hours) more precise on that topic.
NumPy Tutorial: Keith Galli has a number of good data science tutorials.
From my point of view, the training went really fine. Not everyone is equally satisfied with the outcome (we didn’t get to the AI topics, for example), but I have the impression that I brought it over.
As a gift to myself, I had reserved Thursday night at Gmundner Hütter. After the training I went back to Hoisn Wirt (which is where I stayed during the training - really fine), changed clothes, and started to climb the Traunstein via Zierlersteig.
See here for the description and pictures from this extraordinary hike.