Seite 1 von 1

vereinfachung vom code

Verfasst: Samstag 23. Juni 2018, 06:09
von Omm
Hallo zusammen

ich habe das Gefühl , dass man den nachstehenden Code einfachaer haben kann?

Code: Alles auswählen

    def update_infobox(self):
        LastEntry = self.CL_Logfilemanager().returnLastEntry()
        strLastJob = LastEntry.get('Weekday') + " " + LastEntry.get('DateStr') + " " + LastEntry.get(
            'TimeStr') + " \n" + LastEntry.get(
            'ProjectName')
        return strLastJob
wie weiss ich leider nicht. Kann mir da bitte jemand helfen.

Re: vereinfachung vom code

Verfasst: Samstag 23. Juni 2018, 08:09
von snafu
Das geht mit String Formatting. Und häufig benutzte Aufrufe würde ich kurz vor ihrer Verwendung einfach abkürzen:

Code: Alles auswählen

g = LastEntry.get
strLastJob = '{} {} {}\n{}'.format(g('Weekday'), g('DateStr'), g('TimeStr'), g('ProjectName'))

Re: vereinfachung vom code

Verfasst: Samstag 23. Juni 2018, 08:31
von sls
Ab Python3.6 gibt's auch f-Strings als neue/zusätzliche String-Formatierung. Wenn du mit `strLastJob` sonst nichts mehr anstellst, kannst du den formatierten String auch direkt zurückgeben.

Python3.6 (ungetestet):

Code: Alles auswählen

def update_infobox(self):
        le = self.CL_Logfilemanager().returnLastEntry()
        return f"{le['Weekday']}{le['DateStr']}{le['TimeStr']}\n{le['ProjectName']}"
Bei dictionaries, wovon man hier bei `lastEntry` ausgeht, kann man get() weglassen und den Inhalt auslesen in den man dem Objekt einfach nur den ['key'] übergibt. Variablen werden in Python btw klein_mit_unterstrich geschrieben.

Re: vereinfachung vom code

Verfasst: Samstag 23. Juni 2018, 08:33
von Omm
oh sehr schön.
vielen Dank

Re: vereinfachung vom code

Verfasst: Samstag 23. Juni 2018, 10:19
von Sirius3
@Omm: Variablen schreibt man grundsätzlich klein_mit_unterstrich. Typenbezeichner sollten in Namen überhaupt nicht vorkommen: last_job. Wenn LastEntry das ist, was ich von Deinem anderen Thread kenne, dann pack die Daten in passende Datenstrukturen. Weekday, DateStr und TimeStr sollten (wie im anderen Thread schon mehrfach geschrieben) ein Datetime-Objekt sein, das Du dann auch ganz einfach passend formatieren kannst.

Re: vereinfachung vom code

Verfasst: Samstag 23. Juni 2018, 10:33
von __blackjack__
@Omm: Die Namensschreibweisen entsprechen nicht dem Style Guide for Python Code.

Was bedeutet das CL in `CL_Logfilemanager`? Man sollte bei Namen nicht raten müssen, denn Namen sind ja dazu da dem Leser zu vermitteln um was es sich bei dem Wert von der Bedeutung her handelt. Den Namenszusatz `manager` würde ich auch dringend überdenken, denn das ist meistens überflüssig oder weil einem nichts besseres eingefallen ist und man da noch einmal drüber nachdenken sollte. Jede Klasse verwaltet irgendeinen Zustand, deshalb könnte man `manager` auch bei jedem Klassennamen dranpappen, es enthält aber eigentlich keine Information die für den Leser wichtig wäre.

Ich bin mir ziemlich das `returnLastEntry()` eigentlich `getLastEntry()` (bzw. `get_last_entry()`) heissen sollte.

Wenn man etwas an einen Namen bindet und den Namen dann nur in der nächsten Zeile für ein ``return`` verwendet, kann man sich den Namen sparen.

`update_infobox()` aktualisiert gar nichts, das ist also auch ein falscher, irreführender Name.

Ich hätte es so geschrieben:

Code: Alles auswählen

    def get_info(self):
        entry = self.cl_logfile_manager().get_last_entry()
        return '{} {} {}\n{}'.format(
            *map(entry.get, ['Weekday', 'DateStr', 'DateStr', 'ProjectName'])
        )

Re: vereinfachung vom code

Verfasst: Samstag 23. Juni 2018, 11:30
von Omm
ja du hast recht, sollte "get_last_entry" heissen.

oh mann.
So! ich fange neu an.