2012-03-26 2 views
2

Nehmen Sie den folgenden CodeSind Aussagen in der Form bool = (boolescher Ausdruck) Pythonic?

is_valid = command == "B" 

oder

can_move = move in legal_moves() 

Diese in Form sind

bool = (boolean expression) 

ich mich wie diese Schreiben Aussagen gefunden und ich frage mich, ob es „unpythonic betrachtet hat " irgendwie. Ich bin mir nicht sicher, ob ich es sehr mag, aber es ist prägnant.

Also hat jemand sauberere Alternativen?

+0

I Klammer verwenden würde, um es klar, wie 'is_valid = (Befehl == "B")' oder ' can_move = (move in legal_moves()) ', ternärer Operator wäre auch nett:' is_valid = Wahr if (command == "B") else False' – KurzedMetal

Antwort

5

Was Sie haben, würden die meisten Menschen gut in Betracht ziehen. Es ist klar, es ist prägnant, es macht genau das, was es tun muss. Die Standardbibliothek enthält auch viele Beispiele dafür.

0

Das ist in Ordnung. Natürlich, wenn Sie nur einmal testen, müssen Sie wahrscheinlich überhaupt keine Variable zuordnen (außer natürlich, wo Sie vor Zustandsänderungen testen müssen).

+0

Es ist für eine Funktion, die ein Tupel mit mehreren Bools zurückgibt. Ich würde wahrscheinlich die Funktion komplett entfernen, aber es ist eine Voraussetzung für eine Aufgabe. Ich könnte die Ausdrücke direkt in die Return-Anweisung über mehrere Zeilen setzen, aber das könnte weniger lesbar sein. – Lightbreeze

+1

Es dient auch dazu, den Code zu kommentieren, da der Variablenname erklärt, was bis zu einem gewissen Grad vor sich geht. Wenn ein boolescher Aggregat-Ausdruck für eine einzelne Zeile zu lang ist, können Sie ihn in boolesche Chunks zerlegen, die in Variablen gespeichert sind, und schließlich ein 'if right_room_for_an_argument und nicht been_told_once: no_you_havent()'. –

2

scheint seit

  1. Die Standard-Bibliotheken und Dokumentation verwenden diese auch

    feine
  2. ich jeden PEP nicht explizit Alternative was auf ein

  3. PEP 308 bedingten Ausdrücke der Einführung gefunden Formular

    var = val1 if condition else val2 
    

    , die zumindest implizit Inline-Boolean-Zuweisungen fördert. Und

    bool = (boolean expression) 
    

    entspricht, aber prägnanter als

    bool = True if (boolean expression) else False 
    
+0

er, 'True if (boolescher Ausdruck) sonst False', sicher? –

+0

Natürlich. Ich bin offensichtlich nicht komplett Turing. Bearbeitete Antwort. –