Standardwert setzen wenn None

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
Hanna
User
Beiträge: 1
Registriert: Mittwoch 4. Mai 2011, 21:11

Hallo,

gibt es eine Möglichkeit, in einer Zeile einer Variablen einen Standardwert zuzuweisen, wenn die Variable auf None steht?

Ungefähr so:
if VAR == None: VAR=0

Hintergrund: Ich lese eine CSV-Datei aus. Manche Felder sind leer (und damit die Variable die den Inhalt bekommt) und ich würde gerne nicht für jedes Feld zwei Zeilen (if + Zuweisung) schreiben. Das erscheint mir umständlich.


Viele Grüße,
Hanna
BlackJack

@Hanna: ``var = var if var is not None else 0``.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eventuell reicht auch ein ``var = var or 0``, was aber dann natürlich nicht nur bei ``None`` greifen würde.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Gegenfrage: Wieso bindest Du die Spalten einer CSV-Datei an separate Namen? Wäre da eine Liste nicht besser geeignet? (im CSV-Modul wird das ja z.B. so gehandhabt)

Ansonsten gibt es conditional-expressions:

Code: Alles auswählen

foo = bar if bar is not None else default
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@BlackJack, Hyperion
Wieso eigentlich immer mit "is not" prüfen, würde es andersrum die Lesbarkeit dermaßen erschweren? Ich meine die Negation könnte man sich hier doch sparen, oder?

Code: Alles auswählen

foo = default if bar is None else bar
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
lunar

@Xynon1: Im Regelfall ist der Standardwert ja fest und konstant und somit vom Standpunkt des Programmablaufs egal. Dagegen ist es zum Nachvollziehen des Programmablaufs immer wichtig zu wissen, von welchen Namen ein anderer Namen abhängt. Daher ist es sinnvoll, diesen variablen Ausdruck an den Anfang der Zeile zu stellen, wo er ins Auge fällt, und den konstanten Standardwert am Ende anzugeben, wo man ich einfach ignorieren kann, wenn er gerade nicht wichtig ist.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Also Lesbarkeit der Negation vorziehen. (also wie immer :D)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
lunar

@Xynon1: Was stört Dich an der Negation denn so?
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Nichts, es bleibt halt nur im Schädel das es eine Rechenoperation mehr ist :roll: , auch wenn ich eigentlich weiß, dass sowas absolut keine Rolle spielt.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
lunar

@Xynon1: Wieso sollte das eine Rechenoperation mehr sein? "foo is not None" ist nicht dasselbe wie "foo is (not None)" oder "not (foo is None)". "is not" ist ein eigenständiger Operator, genauso wie "not in" oder "!=".
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ok, wusste ich nicht, es sieht halt so aus. Aber selbst wenn es eine Negation wäre - Wen interessiert heute schon eine einzelne Negation?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Was wäre der, wenn auch klitzekleine, Nachteil an einer 'is not' Operation gegenüber einer 'is' Operation?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
lunar

@mutetella: "is" ist eben das genaue Gegenteil von "is not", insofern ist es durchaus nachteilig, "is not" zu verwenden, wenn man eigentlich "is" braucht :)
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@mutetella
Und wenn die Frage darauf abzielt, warum man nicht das ganze umdreht, dann lies doch nochmal meinen ersten Post hier im Thread und lunars mehr als ausführliche Antwort dazu.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@lunar: Danke für Deine Ausführung! Da lad' ich mir doch gleich meinen Philosophiestammtisch zum Grillen ein... :wink:
(Ob es wohl Sinn macht, wenn mein Verhaltenstherapeut auch dabei ist?)

@Xynon1: Schon klar, das habe ich gelesen und mir geht es in meiner Frage auch nicht um Dinge wie Lesbarkeit oder dergleichen.
Du sprachst davon, dass 'is not' eine Rechenoperation mehr bräuchte. Meintest Du damit, dass 'is' und 'not' jeweils eine Operation sind (was ja laut lunar eben nicht so ist) und deshalb mehr 'Vergleichsarbeit' nötig ist?
Oder gibt es dadurch, dass 'is not' ein eigenständiger Operator ist keine weiteren Unterschiede im dahinterliegenden Arbeitsaufwand (nicht im Ergebnis, @lunar :) )?

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
lunar

@mutetella: Mit "is" und "is not" verhält es sich ähnlich wie mit "==" und "!=". In der Implementierungen dieser Operatoren kann es natürlich Unterschiede geben, es mag durchaus sein, dass "is not" intern als "not (… is …)" implementiert ist, ebenso wie man "!=" oft als "not (… == …)" implementiert. Als Python-Entwickler aber muss Dich das nicht interessieren, Du kannst einfach beides als atomare Operatoren betrachten (atomar in dem Sinne, dass es keine zusätzlichen Zwischenschritte gibt).

Soll heißen, Du beschäftigst Dich schon wieder mit völlig irrelevanten Dingen. Wenn Du darüber nachdenkst, ob ein Operator mehr „Vergleichsarbeit“ leistet als ein anderer, ist Python wirklich nicht die richtige Sprache für Dich :) Python verwendet man, weil man sich zugunsten der Les- und Wartbarkeit gerne ein paar zusätzliche Rechenoperationen leisten kann.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

lunar hat geschrieben:Soll heißen, Du beschäftigst Dich schon wieder mit völlig irrelevanten Dingen.
:)
Du hast vollkommen Recht! Dabei wollte und will ich doch nur ein Kalenderprogramm schreiben. Und immer wieder bleibe ich an solchen Fragen hängen. Obwohl es in der (Python-)Praxis kaum bis gar keine Rolle spielt, faszinieren mich diese Themen.
Wahrscheinlich wohl deshalb, weil ich kaum eine Ahnung davon habe... :?

Ok, dann werd' ich mich jetzt wieder meinem Kalender widmen, damit ich die unzähligen Termine, die ich in ein paar Jahren als Rentner zu verwalten habe, über einen Hut bekomme...

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

mutetella hat geschrieben:Und immer wieder bleibe ich an solchen Fragen hängen. Obwohl es in der (Python-)Praxis kaum bis gar keine Rolle spielt, faszinieren mich diese Themen.
Da bist du nicht der einzige :mrgreen:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten