Ich habe gerade erfahren, dass es in Python Wahrheits- und Falschwerte gibt , die sich von den normalen True
und False
?
Kann jemand bitte ausführlich erklären, was wahrheitsgemäße und falschliche Werte sind?
Wo soll ich sie verwenden?
Was ist der Unterschied zwischen Wahrheit und True
Werten und Falschheit und False
Werten?
bool(value)
Ergebnissen führtTrue
,value
ist dies wahr .__nonzero__
und__bool__
Antworten:
Wie in den Kommentaren beschrieben, bezieht es sich nur auf Werte, die als wahr oder falsch bewertet werden.
Um beispielsweise festzustellen, ob eine Liste nicht leer ist, anstatt Folgendes zu überprüfen:
Sie können dies einfach tun:
Dies liegt daran, dass einige Werte, z. B. leere Listen, bei der Auswertung für einen booleschen Wert als falsch betrachtet werden. Nicht leere Listen sind True.
In ähnlicher Weise für die Ganzzahl 0, die leere Zeichenfolge "" usw. für False und Ganzzahlen ungleich Null, nicht leere Zeichenfolgen usw. für True.
Die Idee von Begriffen wie "wahr" und "falsch" bezieht sich einfach auf jene Werte, die in Fällen wie den oben beschriebenen als wahr angesehen werden, und jene, die als falsch angesehen werden.
Beispielsweise wird eine leere Liste (
[]
) als "falsch" und eine nicht leere Liste (zum Beispiel[1]
) als "wahr" betrachtet.Siehe auch diesen Abschnitt der Dokumentation .
quelle
if my_list
bedeutet "wenn meine_Liste nicht leer ist" undif not my_list
bedeutet "wenn meine_Liste leer ist".if a:
was diese art von bedingungen bedeutet? ist es gemein, wenn a wahr ist oder bedeutet, wenn a falsch ist? oder bedeutet es, ob a wahr ist oder ob a falsch ist?if []:
würde nie ausführen.Alle Werte gelten als "wahr", mit Ausnahme der folgenden Werte, die "falsch" sind:
None
False
0
0.0
0j
Decimal(0)
Fraction(0, 1)
[]
- ein leereslist
{}
- ein leeresdict
()
- ein leerestuple
''
- ein leeresstr
b''
- ein leeresbytes
set()
- ein leeresset
range
, wierange(0)
obj.__bool__()
kehrt zurückFalse
obj.__len__()
kehrt zurück0
Ein "wahrheitsgemäßer" Wert erfüllt die von
if
oderwhile
Anweisungen durchgeführte Prüfung . Wir verwenden "wahr" und "falsch", um von denbool
WertenTrue
und zu unterscheidenFalse
.Wahrheitswertprüfung
quelle
__bool__
dann erst__len__
. Wenn keine definiert ist, werden alle Instanzen als "wahr" betrachtet. Dies wird in den Dokumenten für dieobject.__bool__
Methode diskutierttimedelta(0)
ist wie Null. Dies wurde angesprochen, als festgestellt wurde, dass Zeitwerte für Mitternacht falsch waren, was schließlich behoben wurde: lwn.net/Articles/590299Wahrheitswerte beziehen sich auf die in einem booleschen Kontext verwendeten Objekte und nicht so sehr auf den booleschen Wert, der true oder false zurückgibt. Nehmen Sie diese als Beispiel:
quelle
Python bestimmt die Wahrhaftigkeit, indem es
bool()
auf den Typ anwendet , der zurückgibtTrue
oderFalse
der in einem Ausdruck wieif
oder verwendet wirdwhile
.Hier ist ein Beispiel für eine benutzerdefinierte Klasse
Vector2d
, deren Instanz zurückgegeben wird,False
wenn andernfalls die Größe (Länge eines Vektors) 0 istTrue
.Hinweis: Wenn wir nicht definiert hätten
__bool__
, würde immer True zurückgegeben, da Instanzen einer benutzerdefinierten Klasse standardmäßig als wahr angesehen werden.Beispiel aus dem Buch: "Fließend in Python, klare, präzise und effektive Programmierung"
quelle
Wo sollten Sie Wahrheits- oder Falschwerte verwenden? Dies sind syntaktische Zucker , so dass Sie sie immer vermeiden können, aber wenn Sie sie verwenden, können Sie Ihren Code lesbarer und effizienter machen. Darüber hinaus finden Sie sie in vielen Codebeispielen, ob in Python oder nicht, da dies als bewährte Methode angesehen wird.
Wie in den anderen Antworten erwähnt, können Sie sie in if-Tests und while-Schleifen verwenden. Hier sind zwei weitere Beispiele in Python 3 mit Standardwerten kombiniert mit
or
,s
ein String - Variable ist. Sie werden sich auch auf ähnliche Situationen erstrecken.Ohne Wahrheit
mit wahrheit ist es prägnanter:
In Python 3.8 können wir den Zuweisungsausdruck nutzen
:=
ohne wahrheit
mit wahrheit ist es auch kürzer
oder noch kürzer,
Ohne den Zuweisungsausdruck kann man tun
aber nicht kürzer. Einige Leute finden die
s =...
Linie unbefriedigend, weil sie entsprichtTrotzdem können Sie sich an diesen Codierungsstil halten, wenn Sie sich damit wohl fühlen.
quelle
Wenn Sie diese Schleife ausführen würden, würden Sie sehen, dass während 0: = während false:
0 wird als falsch angesehen
quelle
Falsy bedeutet etwas Leeres wie leere Liste, Tupel, wie jeder Datentyp mit leeren Werten oder Keine. Wahrheit bedeutet: Außer Wahrheit
quelle