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”.

The training was accompanied by a lot of improvised live hacking.

Preparation#

Workspace Setup#

Github for Exercises#

Please create Github accounts and send them to training@faschingbauer.co.at. We will do exercises via a private repository on Github.

Agenda#

Advanced Core Python Topics#

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.

Special Topics#

Log#

Following is a recap of what has happened. File names are relative to the root of the Github repository we were working from.

Day 1#

Rushed through basics,

Put a strong focus on Python features,

Day 2#

  • Livehacking: Iteration, Comprehensions, and Generators, covering

    • List comprehensions

    • The range function

    • Writing generators using yield

    • Generator expressions

  • Livehacking OO

  • 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 …

      • The Unser thermometer framework contains a number of thermometer implementations which all support the get_temperature_celsius() method.

      • A collaboration with a competitor is launched. That competitor has a similar set of thermometer implementations. The difference between Eana and Unser is that Eana thermometers do not support get_temperature_celsius(), but rather only get_temperature_fahrenheit().

      • We employ the adapter pattern and create one special thermometer in the Unser hierarchy

        class EanaAdapter(UnserThermometer):
            ...
        

Day 3#

  • Revisit abstract base classes

  • Visitor pattern. Not every pattern in the “Gang of Four” book should be considered a real pattern. For example, the Visitor pattern turn into an idiom for languages that don’t support generators.

    • joerg-livehacking/visitor.py. Classic OO implementation of the visitor pattern as a DFS traversal. Together with callbacks and all convolutions. Took sideways like,

      • show how __call__ makes a class callable.

      • show how __str__ and __repr__ work together in print()

    • 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 from which delegates iteration into recursion.

  • TDD and Unit Testing theory; using excerpts from the Design Patterns deck of slides. Explain terminology; fixtures and such.

  • Start hacking on project. Agreed upon myself doing live hacking. Doing TDD.

    • Project/sensor/sensordata.py, and 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 sensor.sensordata.HistoryData.

    • Slowly fix things, in a test driven way. Discuss, team giving input, all really fine.

Day 4#

After Work Party#

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ütte. 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.