Gibt es einen Vorteil für die Verwendung von DeMorgan Law in Python?

7

Ich benutze pycharm und einige Male bei if-Anweisungen habe ich den Vorschlag gesehen, die Anweisung in DeMorgan Law zu ändern, wie die folgende if-Anweisung.

%Vor%

Für mich macht es es weniger lesbar, gibt es einen Vorteil für die Verwendung von DeMorgan Law oder ist es eine persönliche Entscheidung?

    
Padraic Cunningham 23.01.2014, 22:49
quelle

5 Antworten

15

Vor allem seine DeMorgan-Gesetze , nicht DeMorgans Law , das besagt:

  

"nicht (A und B)" ist dasselbe wie "(nicht A) oder (nicht B)"

     

und auch

     

"nicht (A oder B)" ist dasselbe wie "(nicht A) und (nicht B)"

Welche werden verwendet, um die Logik zwischen alternativen Formen zu transformieren. Während also die von Ihnen vorgenommene Transformation den DeMorganschen Gesetzen entspricht, ist es schwieriger zu lesen. Wie andere vorgeschlagen haben, wäre das viel einfachere 10 < new_odds <= 30 viel besser lesbar, aber es ist sehr wichtig zu verstehen, dass dies eine Abkürzung für 10 < new_odds and new_odds <= 30 ist, denn daraus folgt Logik wie:

%Vor%

Welche erweitert zu:

%Vor%

Schauen wir uns also mit diesem syntaktischen Zucker ein anderes Beispiel an:

Wir werden ein künstliches Beispiel im einfachen Rollenspiel betrachten, in dem wir uns eine Fähigkeit ansehen, die wir "holländischen Mut" nennen. Die Voraussetzung dieses Angriffs ist, dass du einen Bonus erhalten kannst, wenn du bei maximaler Gesundheit bist und entweder deine Rüstung oder deine Angriffsstärke nicht ausreicht, um einen Feind anzugreifen. Ich muss wissen, wann diese Regel nicht gilt.

Das schreiben wir haben 4 Bedingungen:

%Vor%

Mit DeMorgans Gesetzen kann ich das so zerlegen:

%Vor%

Nun, jetzt kann ich das weiter zerlegen ...

%Vor%

Hier nehmen wir das Gegenteil von% co_de an% ist == max_health andernfalls ist es nicht das Maximum.

Obwohl es erfunden ist, zeigt uns das, dass DeMorgans Gesetze ein Werkzeug sind, das uns ermöglicht, Logik umzuschreiben . Ob diese Logik verbessert wird oder nicht, hängt vom Programmierer ab, aber die Absicht ist, einfachere Konstrukte erzeugen zu können, die zuerst lesbarer sind und zweitens hoffentlich weniger Anweisungen benötigen und daher schneller sind.

    
user764357 23.01.2014, 23:32
quelle
7

In Python ist es fast immer besser klar zu sein als etwas schneller (wenn das auch wäre, was ich bezweifle).

Ich bevorzuge diese noch einfachere Aussage:

%Vor%     
mhlester 23.01.2014 22:51
quelle
5

In einigen Fällen macht es die Dinge verständlicher und lesbarer. In Fällen, in denen Sie bereits eine Menge not s verstreut haben oder wenn Sie Dinge in einer weniger als natürlichen Reihenfolge vergleichen, kann demorganing die Anzahl von not s reduzieren oder die Reihenfolge der ungleiche Vergleiche. Zum Beispiel:

%Vor%

(Der zweite ist strittig ... aber das ist genau das, was Sie von einer Frage der Lesbarkeit und des Stils erwarten würden.)

Also, wenn es Ihren Code lesbarer macht, tun Sie es; Sonst nicht.

There sind eine Handvoll Sprachen (Logik, Constraint-Befriedigung, relational, usw.), wo dies nicht wahr ist, weil das Anwenden von not auf einen Wert nicht nur True und Falsch, aber eine umgekehrte, möglicherweise viel langsamere oder möglicherweise sogar unbestimmte Abfrage erzeugen.

Aber das ist bei Python oder den meisten anderen "Allzweck" -Sprachen nicht der Fall.

    
abarnert 23.01.2014 22:51
quelle
2

Angesichts der folgenden Ergebnisse scheint der komplexere / weniger lesbare Ausdruck auch der langsamste zu sein. In jedem Fall ist Lesbarkeit in Python die meiste Zeit wertvoller.

%Vor%     
bvidal 23.01.2014 23:00
quelle
1

Es kann manchmal nützlich für die Lesbarkeit sein, aber es ist dasselbe bei der Ausführung. Zum Beispiel mit:

%Vor%

Die Ausführung ist identisch mit a() True oder False.

Für Ihr Beispiel bleibt die beste Lösung, die Leistungsfähigkeit der Python-Syntax zu nutzen und zu schreiben:

%Vor%

Diese Syntax ist äußerst nützlich, um zu überprüfen, ob ein numerischer Wert in einem bestimmten Bereich liegt.

    
Maxime Lorant 23.01.2014 22:55
quelle

Tags und Links