Sind die folgenden Verwendungen von logischen Ausdrücken Pythonic / pep8 kompatibel?
Dies:
%Vor%anstelle von:
%Vor%Dies:
%Vor%anstelle von:
%Vor%(Der Kurvenball?) Dies:
%Vor%anstelle von:
%Vor%PEP 8 hat nichts damit zu tun, wie Sie Ihre logischen Operatoren verwenden.
>Unter der Annahme, dass die Motivation für die Verwendung der logischen Operatoren anstelle der Bedingungen kurz ist, ist dies besser mit dem ternären Operator zu erreichen:
%code% anstelle von %code%
%code% anstelle von %code%
%code% oder nur %code% anstelle von %code%
Aber niemand verbietet dir, auch die anderen Versionen zu benutzen. Es ist alles ein Meter persönlicher Meinung. Die Motivation hinter der Einführung des ternären Operators war, die fehleranfälligen Versuche zu vermeiden, den gleichen Effekt mit den Operatoren %code% und %code% zu erreichen (siehe PEP 308 ). Sie ermöglichen auch ausgefallene Dinge in der Liste und einige weitere Dinge.
Sie werden nicht eingeführt, um komplexe if-Anweisungen zu ersetzen, sondern als pythonischer ternärer Operator: %code% .
Ich glaube nicht, dass pep8 dies abdeckt, aber in meinen Beispielen sehen die %code% -Anweisungen besser lesbar aus (vor allem für Personen, die Python neu kennen und daher mehr Pythonic wegen "Lesbarkeitszählungen") als logische Operatoren , die immer noch pythonischer als ternäre Operatoren aussehen.
Allerdings sind ternäre Operatoren definitiv besser als %code% , %code% usw., weil sie lesbarer und weniger wahrscheinlich sind.
Im Gegensatz zu C und Java geben die logischen Operatoren von Python keine booleschen Werte zurück. Ich kann mir keinen anderen Anwendungsfall für dieses Sprachfeature neben dem in Ihrer Frage vorstellen. Wenn also die Sprachdesigner keine Features gedankenlos hinzufügen, ist es Pythonic (außer für # 3).
Es gibt viele Fälle, in denen das logische Kurzschluss-ODER zu Ihrem Vorteil genutzt werden kann. Hier ist eine einfache aus dem Quelltext von Anfragen :
%Vor%Es ist sofort offensichtlich, was das Ergebnis dieses Codes sein sollte, da es sich wie ein Satz liest. Das soll nicht heißen, dass die ausführlichen Versionen nicht lesbar sind:
%Vor%Und:
%Vor%Aber sie sind überflüssig. Python verwendet die gleiche Syntax für Wörterbücher, um die gleiche Redundanz zu vermeiden:
%Vor%PEP 8 hat nichts damit zu tun, wie Sie Ihre logischen Operatoren verwenden.
>Unter der Annahme, dass die Motivation für die Verwendung der logischen Operatoren anstelle der Bedingungen kurz ist, ist dies besser mit dem ternären Operator zu erreichen:
x = a if a else b
anstelle von x = a or b
x = b if a else a
anstelle von x = a and b
x = x if x else y
oder nur if not x: x = y
anstelle von x = x or y
Aber niemand verbietet dir, auch die anderen Versionen zu benutzen. Es ist alles ein Meter persönlicher Meinung. Die Motivation hinter der Einführung des ternären Operators war, die fehleranfälligen Versuche zu vermeiden, den gleichen Effekt mit den Operatoren and
und or
zu erreichen (siehe PEP 308 ). Sie ermöglichen auch ausgefallene Dinge in der Liste und einige weitere Dinge.
Sie werden nicht eingeführt, um komplexe if-Anweisungen zu ersetzen, sondern als pythonischer ternärer Operator: x if condition else y
.
Ich glaube nicht, dass pep8 dies abdeckt, aber in meinen Beispielen sehen die if
-Anweisungen besser lesbar aus (vor allem für Personen, die Python neu kennen und daher mehr Pythonic wegen "Lesbarkeitszählungen") als logische Operatoren , die immer noch pythonischer als ternäre Operatoren aussehen.
Allerdings sind ternäre Operatoren definitiv besser als condition and true_value or false_value
, (false_value, true_value)[condition]
usw., weil sie lesbarer und weniger wahrscheinlich sind.
Tags und Links python logical-operators pep8