Seite 1 von 1

Standardwert setzen wenn None

Verfasst: Mittwoch 4. Mai 2011, 21:19
von Hanna
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

Re: Standardwert setzen wenn None

Verfasst: Mittwoch 4. Mai 2011, 21:30
von BlackJack
@Hanna: ``var = var if var is not None else 0``.

Re: Standardwert setzen wenn None

Verfasst: Mittwoch 4. Mai 2011, 21:34
von snafu
Eventuell reicht auch ein ``var = var or 0``, was aber dann natürlich nicht nur bei ``None`` greifen würde.

Re: Standardwert setzen wenn None

Verfasst: Mittwoch 4. Mai 2011, 21:34
von Hyperion
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

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 11:18
von Xynon1
@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

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 11:26
von 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.

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 11:33
von Xynon1
Also Lesbarkeit der Negation vorziehen. (also wie immer :D)

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 11:36
von lunar
@Xynon1: Was stört Dich an der Negation denn so?

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 11:40
von Xynon1
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.

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 11:48
von 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 "!=".

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 12:06
von Xynon1
Ok, wusste ich nicht, es sieht halt so aus. Aber selbst wenn es eine Negation wäre - Wen interessiert heute schon eine einzelne Negation?

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 16:41
von mutetella
Was wäre der, wenn auch klitzekleine, Nachteil an einer 'is not' Operation gegenüber einer 'is' Operation?

mutetella

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 17:08
von 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 :)

Re: Standardwert setzen wenn None

Verfasst: Donnerstag 5. Mai 2011, 17:30
von Xynon1
@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.

Re: Standardwert setzen wenn None

Verfasst: Freitag 6. Mai 2011, 06:44
von mutetella
@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

Re: Standardwert setzen wenn None

Verfasst: Freitag 6. Mai 2011, 08:26
von 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.

Re: Standardwert setzen wenn None

Verfasst: Freitag 6. Mai 2011, 09:15
von mutetella
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

Re: Standardwert setzen wenn None

Verfasst: Freitag 6. Mai 2011, 09:19
von Xynon1
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: