2015-03-06 8 views

Odpowiedz

12

Zawsze można rozszerzyć logical line across multiple physical lines z nawiasami:

answer = (
    'Ten for that? You must be mad!' if does_not_haggle(brian) 
    else "It's worth ten if it's worth a shekel.") 

To się nazywa implicit line joining.

Powyższe używa stylu PEP8 wszystko-wcięte-jeden-krok-więcej (o nazwie hanging indent). Możesz także wyciąć dodatkowe wiersze, aby dopasować je do nawiasu otwierającego:

answer = ('Ten for that? You must be mad!' if does_not_haggle(brian) 
      else "It's worth ten if it's worth a shekel.") 

, ale to powoduje, że osiągasz maksimum o 80 kolumn tym szybciej.

Gdzie dokładnie można umieścić części if i else; Użyłem moich osobistych preferencji powyżej, ale nie ma żadnego konkretnego stylu dla operatora, na który ktoś się zgodził.

19

PEP8 mówi preferred way of breaking long lines is using parentheses:

Korzystnym sposobem pakowania długich linii jest Pythonie wynikało kontynuacji linii wewnątrz okrągłe, kwadratowe i stężeń. Długie linie mogą być przerywane na wiele linii poprzez zawijanie wyrażeń w nawiasach. Powinny być one używane zamiast używania odwrotnego ukośnika do kontynuacji linii.

answer = ('Ten for that? You must be mad!' 
      if does_not_haggle(brian) 
      else "It's worth ten if it's worth a shekel.") 
+0

Dzięki za odpowiedź! Uważam, że obie odpowiedzi są równoważne, więc przyjąłem starszy. – nedim

+0

Aktualizacja dla monty python – Mark

0

Pamiętaj, ta rada z Zen Pythona "Liczy czytelności"

Operator trójskładnikowy jest najbardziej czytelny, gdy wszystko znajduje się w jednym wierszu.

x = y if z else w

Gdy warunki lub zmienne naciskać linię minionych 79 znaków (patrz PEP8), czytelność zaczyna cierpieć. (Czytelność jest również powodem, dla którego najlepszym rozwiązaniem jest dict/list).

Zamiast więc próbować przerwać linię za pomocą nawiasów, może się okazać, że jest ona bardziej czytelna, jeśli przekształcisz ją w zwykły blok if.

if does_not_haggle(brian): 
    answer = 'Ten for that? You must be mad!' 
else: 
    answer = "It's worth ten if it's worth a shekel." 

BONUS: Powyższy refaktoring ujawnia inny problem czytelności: does_not_haggle jest odwrócony logiczny. Byłoby to jeszcze bardziej czytelne, jeśli można przepisać funkcję:

if haggles(brian): 
    answer = "It's worth ten if it's worth a shekel." 
else: 
    answer = 'Ten for that? You must be mad!' 
Powiązane problemy