2015-03-06 16 views
11

Đôi khi một dòng chứa một nhà điều hành ternary bằng Python trở nên quá dài:Làm cách nào để ngắt dòng trên toán tử ternary Python?

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

Có cách nào đề nghị để thực hiện một ngắt dòng ở 79 ký tự với một nhà điều hành ternary? Tôi không tìm thấy nó trong PEP 8.

+0

Đặt nó vào dấu ngoặc đơn. –

Trả lời

12

Bạn luôn có thể mở rộng một logical line across multiple physical lines với dấu ngoặc đơn:

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

này được gọi là implicit line joining.

Ở trên sử dụng kiểu PEP8 mọi thứ-thụt lề-một-nhiều-hơn (được gọi là hanging indent). Bạn cũng có thể thụt lề các dòng thừa để khớp với dấu ngoặc đơn mở:

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

nhưng điều này khiến bạn đạt cực đại 80 cột nhanh hơn.

Trường hợp bạn đặt các phần ifelse vào chính xác bạn ở đâu; Tôi đã sử dụng sở thích cá nhân của mình ở trên, nhưng chưa có phong cách cụ thể cho nhà điều hành mà bất kỳ ai cũng đồng ý.

19

PEP8 nói preferred way of breaking long lines is using parentheses:

Cách ưa thích của gói đường dài là sử dụng ngụ ý tiếp tục dòng Python bên trong dấu ngoặc, dấu ngoặc và dấu ngoặc. Đường dài có thể được chia nhỏ trên nhiều dòng bằng cách bao gồm các biểu thức trong các dấu ngoặc đơn . Chúng nên được sử dụng theo sở thích để sử dụng dấu gạch chéo ngược để tiếp tục dòng.

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

Cảm ơn câu trả lời của bạn! Tôi tìm thấy hai câu trả lời tương đương vì vậy tôi chấp nhận câu trả lời cũ hơn. – nedim

+0

Bỏ phiếu cho tham chiếu python monty – Mark

0

Ghi nhớ lời khuyên này từ The Zen của Python: "Độ khó tính"

Toán tử bậc ba có thể đọc được nhiều nhất khi tất cả trên cùng một dòng.

x = y if z else w

Khi điều kiện hoặc các biến của bạn đẩy dòng qua 79 ký tự (xem PEP8), dễ đọc bắt đầu phải chịu đựng. (Readability cũng là lý do tại sao dict/list comprehensions được giữ nguyên ngắn nhất.)

Vì vậy, thay vì cố gắng phá vỡ đường bằng dấu ngoặc đơn, bạn có thể thấy nó dễ đọc hơn nếu bạn chuyển nó sang khối if thông thường.

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." 

THƯỞNG: Việc tái cấu trúc ở trên cho thấy một vấn đề dễ đọc khác: does_not_haggle là nghịch đảo logic. Điều này sẽ dễ đọc hơn, nếu bạn có thể viết lại hàm:

if haggles(brian): 
    answer = "It's worth ten if it's worth a shekel." 
else: 
    answer = 'Ten for that? You must be mad!' 
Các vấn đề liên quan