2017-06-17 1 views
3

Als ich Python lerne, bin ich auf verschiedene Stile gestoßen. Ich frage mich, was der Unterschied zwischen der Verwendung von "else" im Gegensatz zu nur Code außerhalb der "if" -Anweisung ist. Um meine Frage weiter zu erläutern, hier sind zwei Blöcke von Code unten.Was ist der Unterschied zwischen "else: return True" und "return True"?

Ich verstehe, dass dies False zurückgibt, wenn x! = 5, aber wie steht dieser Code unter dem obigen Code? Ist es genau dasselbe oder gibt es einen kleinen Unterschied? Gibt es einen Vorteil, einen über den anderen zu verwenden?

x = 5 
if x == 5: 
    return True 
return False 
+0

Gute Frage. Es ist genau dasselbe. :-) – Idanmel

+1

Lesbarkeit? Präferenz? – JakeD

+0

Ich verstehe, was Sie mit Ihrer Frage meinen, aber nur darauf hinweisen, dass Ihr Code wie geschrieben einen SyntaxError werfen wird. – Daniel

Antwort

6

In Ihrem Code, gibt es keinen Unterschied, weil der if Teil mit einem return endet, wenn die Bedingung erfüllt ist, und der Code auf jeden Fall verlassen wird. Und wenn die Bedingung falsch ist, wird die Verzweigung else ausgeführt, die ebenfalls mit einer return endet, sodass die else nicht erforderlich ist.

Es ist eine Frage des Stils, aber es kann argumentiert werden, dass die zweite Option bevorzugt wird, IMHO ist einfacher zu lesen und mit weniger Rechts Drift - in der Tat einige Sprachen/Compiler wird es mit einer Warnung kennzeichnen, weil die else würde unnötig sein.

Der Schlüsselpunkt hier ist, dass, wenn beide Zweige eines bedingten Endes mit einer return dann die else nicht obligatorisch ist. Aber wenn das nicht der Fall ist, müssen Sie else verwenden, sonst werden Sie Code ausführen, der nicht beabsichtigt war. Zum Beispiel, hier kann man das nicht entfernen else:

if n > 10: 
    n = 1 
else: 
    n *= 10 
+0

setzen Also, gibt es einen Grund, sonst überhaupt zu verwenden? –

+0

In diesem Fall nein, aber wenn Sie _returning_ nicht von beiden Zweigen erhielten, wäre die Verwendung von 'else' obligatorisch. –

+0

Vielen Dank, ich habe gerade festgestellt, dass wenn Sie versuchen, eine Zeichenfolge ohne "sonst" zu verwenden, wird die Zeichenfolge und dann "Keine" gedruckt. Ich gehe davon aus, dass das Auslassen von "sonst" nur boolesch spezifisch wäre. –

5

Es gibt einen sehr geringen Unterschied, aber es ist ein würden Sie nicht wirklich interessieren. Vor dem Hintergrund dieser zwei Funktionen:

def f1(): 
    x = 5 
    if x == 5: 
     return True 
    else: 
     return False 

def f2(): 
    x = 5 
    if x == 5: 
     return True 
    return False 

Blick auf den Code-Byte von jedem resultierenden:

>>> dis.dis(f1) 
    4   0 LOAD_CONST    1 (5) 
       2 STORE_FAST    0 (x) 

    5   4 LOAD_FAST    0 (x) 
       6 LOAD_CONST    1 (5) 
       8 COMPARE_OP    2 (==) 
      10 POP_JUMP_IF_FALSE  16 

    6   12 LOAD_CONST    2 (True) 
      14 RETURN_VALUE 

    8  >> 16 LOAD_CONST    3 (False) 
      18 RETURN_VALUE 
      20 LOAD_CONST    0 (None) 
      22 RETURN_VALUE 
>>> dis.dis(f2) 
11   0 LOAD_CONST    1 (5) 
       2 STORE_FAST    0 (x) 

12   4 LOAD_FAST    0 (x) 
       6 LOAD_CONST    1 (5) 
       8 COMPARE_OP    2 (==) 
      10 POP_JUMP_IF_FALSE  16 

13   12 LOAD_CONST    2 (True) 
      14 RETURN_VALUE 

14  >> 16 LOAD_CONST    3 (False) 
      18 RETURN_VALUE 

Für die erste Funktion, noch Python erzeugt ein Paar von Anweisungen für die unerreichbare impliziten return None.

Verwandte Themen