vereinfachung vom code

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

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.
Benutzeravatar
snafu
User
Beiträge: 6736
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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'))
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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.
When we say computer, we mean the electronic computer.
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

oh sehr schön.
vielen Dank
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Benutzeravatar
__blackjack__
User
Beiträge: 13068
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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'])
        )
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Omm
User
Beiträge: 90
Registriert: Samstag 7. April 2018, 14:05

ja du hast recht, sollte "get_last_entry" heissen.

oh mann.
So! ich fange neu an.
Antworten