Ist es Pythonic zu bools verwenden wie ints?
False
entspricht 0
und True
entspricht 1
so ist es möglich, so etwas zu tun:
def bool_to_str(value):
"""value should be a bool"""
return ['No', 'Yes'][value]
bool_to_str(True)
Bemerken, wie Wert ist bool
aber als int
.
Ist diese Art der Nutzung Pythonic oder sollte es vermieden werden?
- Dies ist im wesentlichen ein Duplikat der stackoverflow.com/questions/2764017/..., deren Antworten für eine interessante Lektüre auch!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde ich die sonderbare Stimme aus (da alle Antworten sind decrying die Nutzung der Tatsache, dass
False == 0
undTrue == 1
, wie die Sprache, Garantien), wie ich behaupte, daß diese Tatsache um Ihren code zu vereinfachen, ist das völlig in Ordnung.Historisch, logisch wahren ('true/false-Operationen tendenziell verwenden Sie einfach
0
für falsch und1
für wahr; im Laufe der Python-2.2 life-cycle, Guido bemerkt, dass zu viele Module begann mit Zuordnungen wiefalse = 0; true = 1
und produzierte diese vorformulierten und nutzlos-Variante (letztere, weil die Kapitalisierung von wahr und falsch war überall-ein paar gebrauchte all-caps, einige Kleinschreibung, einige gap-initial) und so stellte diebool
Unterklasse vonint
und seineTrue
undFalse
Konstanten.Es war schon einige pushback zu der Zeit, da viele von uns befürchtet hatten, dass der neue Typ-und Konstanten verwendet werden würde, indem Sie Python-Neulinge zu beschränken die Sprache, Fähigkeiten, aber Guido war felsenfest davon überzeugt, dass wir nur pessimistisch: niemand würde jemals verstehen, Python so schlecht, zum Beispiel, zu vermeiden, die auf ganz Natürliche Verwendung von
False
undTrue
als Liste von Indizes, oder in einer Summe, oder anderen solchen perfekt klare und nützliche Redewendungen.Die Antworten auf diesen thread beweisen, dass wir Recht hatten: als wir befürchteten, insgesamt Missverständnis der Rollen von diesem Typ und Konstanten hat entstanden, und die Menschen sind zu vermeiden, und, schlimmer!, drängen andere zu vermeiden, auf ganz Natürliche Python-Konstrukte zu Gunsten von nutzlosen Verrenkungen.
Kampf gegen die Flut solcher Missverständnisse, ich fordere jeden auf, die Verwendung von Python, wie Python, nicht versucht zu zwingen, es in die Formen der anderen Sprachen, deren Funktionalität und Ihren bevorzugten Stil sind ganz anders. In Python, True und False sind zu 99,9% wie 1 und 0, unterschiedliche ausschließlich in Ihrer
str(...)
(und damitrepr(...)
) form -- für jeder anderen Betrieb außer stringification, sich fühlen gerade frei, um Sie zu benutzen, ohne Verrenkungen. Das gilt für die Indizierung -, Arithmetik -, bit-Operationen, etc, etc, etc.val?1:0
und ähnliche gymnastik junk, wenn Sie brauchen, um zu behandeln, einen bool als ein int.bool
Unterklassenint
… if … else …
- Ansatz).'True' if value else 'False'
funktioniert mit jedem truishvalue
.Ich bin mit Alex.
False==0
undTrue==1
, und es ist nichts falsch mit, dass.Immer noch in Python 2.5 und höher würde ich schreiben, die Antwort auf diese Frage mit Python bedingter Ausdruck:
Es nicht erforderlich, das argument ist eigentlich ein bool-nur als
if x: ...
akzeptiert jede Art fürx
, diebool_to_str()
Funktion sollte das richtige tun, wenn es vergangen Keine, ein string, eine Liste, oder 3.14.sicher:
ist mehr lesbar.
x if foo else y
Ding ist mehr pythonic, aber ich denke immer noch, dass es nur hässlich aussieht und oft bläht code. Ich denke, den code in die Frage Aussehen klarer, es kann verwirrend sein für Leute, die nicht wissen, über die implizite bool zu int Konvertierung, aberx if foo else y
ist genauso verwirrend für jemanden, der aus denfoo ? x : y
Welt der Dinge. Obwohl ich zugeben muss, dass für Menschen, die lernen Ihre erste Sprache, diex if foo else y
vielleicht am deutlichsten ein.Dein code scheint ungenau, in einigen Fällen:
Und ich empfehle, dass Sie nur das conditional-operator für die Lesbarkeit:
bool_to_str
mit doc-Kommentarvalue should be a bool
, und Sie sind überrascht, dass es gibt eine falsche Antwort, wenn Sie es passieren-2
🙂… if … else …
- Methode können Sie code produzieren, der nicht unnötig restriktiv sind.bool
gewährt... if ... else ...
. Die Funktion für die bools und nichts anderes. Obwohl vielleicht gerade nicht das beste Beispiel, da ich nicht einverstanden mit der Idee der Verwendung von bools als ints.True
oderFalse
) oder ein "truthy Ausdruck" (z.B.a and b or c
), dann wenden Sie einfach diebool
- Funktion auf den Wert. Simples!Ist es eigentlich ein feature der Sprache, False == 0 und True == 1 (es hängt nicht von der Umsetzung): Ist False == 0 und True == 1 in Python eine Implementierung detail, oder ist es garantiert durch die Sprache?
Aber ich Stimme mit den meisten der anderen Antworten: es gibt mehr lesbar Möglichkeiten erhalten das gleiche Ergebnis wie
['No', 'Yes'][value]
, die durch die Nutzung der… if value else …
oder ein Wörterbuch, das die jeweiligen Vorteile von hinting und die besagt, dassvalue
ist ein boolescher Wert.Plus, die
… if value else …
folgt der üblichen Konvention, dass nicht 0 ist Wahr: es funktioniert auch noch, wennvalue == -2
(Wert ist True) ist, wie angedeutet, durch dahlia. Die list und dict Ansätze sind nicht so robust, in diesem Fall, so würde ich nicht empfehlen.Mithilfe eines bool als ein int ist ganz OK, denn bool ist Subklasse von int.
Über Ihre-code: indem es in eine Online-Funktion wie das ist over the top. Leser finden müssen, Ihre Funktion Source (Quelle) oder docs und Lesen (der name der Funktion sagt Ihnen nicht viel). Dies unterbricht die Strömung. Nur inline und nicht mit einer Liste (gebaut zur Laufzeit), verwenden ein Tupel (gebaut zur compile-Zeit, wenn die Werte sind Konstanten). Beispiel:
Ich persönlich denke, es hängt davon ab, wie wollen Sie diese Tatsache nutzen, hier sind zwei Beispiele
Einfach mit booleschen als bedingte Anweisung ist in Ordnung. Menschen tun das die ganze Zeit.
Aber sagen, das Sie zählen möchten, wie viele Elemente hat, gelingt es, die code vielleicht nicht sehr freundlich zu anderen Menschen zu Lesen.
Aber ich sehe die Produktions-code wie folgt Aussehen.