2008-09-09 46 views

Trả lời

846

dòng là gì? Bạn chỉ có thể có đối số trên dòng tiếp theo mà không bất kỳ vấn đề:

a = dostuff(blahblah1, blahblah2, blahblah3, blahblah4, blahblah5, 
      blahblah6, blahblah7) 

Nếu không, bạn có thể làm một cái gì đó như thế này:

if a == True and \ 
    b == False 

Kiểm tra style guide để biết thêm thông tin.

Từ ví dụ dòng của bạn:

a = '1' + '2' + '3' + \ 
    '4' + '5' 

Hoặc:

a = ('1' + '2' + '3' + 
    '4' + '5') 

Lưu ý rằng các hướng dẫn phong cách nói rằng việc sử dụng sự tiếp nối ngầm với dấu ngoặc đơn được ưa chuộng, nhưng trong trường hợp đặc biệt này chỉ cần thêm dấu ngoặc xung quanh biểu hiện của bạn có lẽ là sai lầm để đi.

+25

Trên thực tế, bạn có sở thích hướng dẫn phong cách của chính xác về phía sau.Tiếp tục ngầm được ưu tiên, dấu gạch chéo ngược rõ ràng chỉ được sử dụng nếu cần. –

+0

Tôi nghĩ rằng nó nói rằng nếu bạn có dấu ngoặc xung quanh một biểu thức đã có, sử dụng chúng, nhưng không đặt dấu ngoặc xung quanh một biểu thức chỉ với mục đích phá vỡ nó trên nhiều dòng. Không có quy tắc cứng và nhanh nào. Tôi nghĩ rằng cho dòng trong câu hỏi mặc dù, một dấu gạch chéo ngược là con đường để đi. –

+0

Điều đó không chính xác. Vui lòng chỉnh sửa câu trả lời của bạn để phản ánh những gì hướng dẫn về phong cách thực sự nói, thay vì nói ngược lại. –

17

Đặt một \ vào cuối dòng của bạn hoặc gửi kèm theo báo cáo kết quả trong parens (..). Từ IBM:

b = ((i1 < 20) and 
    (i2 < 30) and 
    (i3 < 40)) 

hoặc

b = (i1 < 20) and \ 
    (i2 < 30) and \ 
    (i3 < 40) 
14

Từ miệng của ngựa: Explicit line joining

Hai hoặc nhiều dòng vật lý có thể gia nhập vào dòng logic sử dụng ký tự gạch chéo ngược (\), như sau: khi một dòng vật lý kết thúc bằng một dấu gạch chéo rằng không phải là một phần của chuỗi chữ hoặc nhận xét, nó được nối với sau đây tạo thành một dòng lôgic duy nhất, xóa dấu gạch chéo ngược và ký tự cuối dòng sau đây. Đối với dụ:

if 1900 < year < 2100 and 1 <= month <= 12 \ 
    and 1 <= day <= 31 and 0 <= hour < 24 \ 
    and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date 
     return 1 

Một dòng kết thúc bằng một dấu gạch chéo không có thể mang theo một nhận xét. Dấu gạch chéo ngược không tiếp tục nhận xét. Dấu gạch chéo ngược không không tiếp tục mã thông báo ngoại trừ chuỗi chữ (ví dụ: mã thông báo không phải là chuỗi ký tự không thể được chia tách trên dòng vật lý sử dụng dấu gạch chéo ngược). A dấu gạch chéo ngược là bất hợp pháp ở nơi khác trên một dòng bên ngoài một chuỗi chữ.

+6

-1 vì ví dụ là IMO không đơn sắc. Các điều kiện hợp chất hoàn toàn có thể có các dấu ngoặc kèm theo, đó là thực tế hơn (để chỉnh sửa hoặc tự động rewrapping) và thành ngữ. – u0b34a0f6ae

+0

Liên kết của bạn bị hỏng. – MarianD

165

Từ Style Guide for Python Code:

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

Các dấu gạch chéo ngược đôi khi vẫn có thể thích hợp. Ví dụ: dài, nhiều câu lệnh có thể không sử dụng tiếp tục ngầm, do đó, các dấu gạch chéo ngược có thể chấp nhận được:

with open('/path/to/some/file/you/want/to/read') as file_1, \ 
     open('/path/to/some/file/being/written', 'w') as file_2: 
    file_2.write(file_1.read()) 

Một trường hợp như vậy là với câu khẳng định.

Đảm bảo thụt lề dòng liên tục một cách thích hợp. Địa điểm ưa thích để giải quyết xung quanh toán tử nhị phân là sau toán tử, không phải trước toán tử đó. Một số ví dụ:

class Rectangle(Blob): 

    def __init__(self, width, height, 
       color='black', emphasis=None, highlight=0): 
     if (width == 0 and height == 0 and 
       color == 'red' and emphasis == 'strong' or 
       highlight > 100): 
      raise ValueError("sorry, you lose") 
     if width == 0 and height == 0 and (color == 'red' or 
              emphasis is None): 
      raise ValueError("I don't think so -- values are %s, %s" % 
          (width, height)) 
     Blob.__init__(self, width, height, 
         color, emphasis, highlight) 

EDIT: PEP8 nay khuyến cáo các ngược lại ước (đối với vi phạm trong hoạt động nhị phân) được sử dụng bởi nhà toán học và nhà xuất bản của họ để cải thiện khả năng đọc.

Kiểu phá hủy của Donald Knuth trước toán tử nhị phân căn chỉnh các toán tử theo chiều dọc, do đó giảm khối lượng công việc của mắt khi xác định mục nào được cộng và trừ.

Từ PEP8: Should a line break before or after a binary operator?:

Donald Knuth giải thích các quy tắc truyền thống trong máy tính của mình và hàng loạt sắp chữ: "Mặc dù công thức trong một đoạn văn luôn luôn phá vỡ sau khi hoạt động nhị phân và các mối quan hệ, hiển thị công thức luôn luôn phá vỡ trước khi hoạt động nhị phân" [3 ].

Tiếp nối truyền thống từ toán học thường dẫn đến mã dễ đọc hơn:

# Yes: easy to match operators with operands 
income = (gross_wages 
      + taxable_interest 
      + (dividends - qualified_dividends) 
      - ira_deduction 
      - student_loan_interest) 

Trong mã Python, nó được phép để phá vỡ trước hoặc sau khi một nhà điều hành nhị phân, miễn là quy ước phù hợp tại địa phương. Đối với mã mới, kiểu Knuth được đề xuất.

[3]: Các TeXBook Donald Knuth, trang 195 và 196

+2

NB đề xuất thay đổi trong năm 2010: "Đường dài có thể bị hỏng ... bằng cách gói biểu thức trong dấu ngoặc đơn. Chúng nên được sử dụng tùy chọn sử dụng dấu gạch chéo ngược ..." và tất cả dấu gạch chéo ngược đã bị xóa khỏi ví dụ mã. – e100

+1

@ e100: đọc văn bản in đậm ở trên: 'Cách ưa thích .. là sử dụng tiếp tục dòng của Python trong dấu ngoặc đơn', nó giống với' bằng cách gói biểu thức trong dấu ngoặc đơn'. Tôi đã cập nhật ví dụ – jfs

+9

Nhưng lưu ý rằng "đôi khi sử dụng dấu gạch chéo ngược trông đẹp hơn" cũng đã biến mất. – e100

57

Sự nguy hiểm trong việc sử dụng một dấu gạch chéo để kết thúc một dòng là nếu khoảng trắng được thêm vào sau dấu chéo ngược (trong đó, tất nhiên, là rất khó thấy), dấu gạch chéo ngược không còn làm những gì bạn nghĩ nữa.

Xem thành ngữ và thành phần của Python (dành cho Python 2 hoặc Python 3) để biết thêm.

+6

Đây là một trong những lý do tốt để có thể nhìn thấy khoảng trắng ở cuối tốt hơn; tức là một cái gì đó như 'list list listchars = trail: ·' trong vim. :) – Beau

20

Bạn có thể ngắt dòng ở giữa dấu ngoặc đơn và dấu ngoặc ôm. Thêm vào đó, bạn có thể thêm các nhân vật xuyệc ngược \ đến một dòng để phá vỡ nó một cách rõ ràng:

x = (tuples_first_value, 
    second_value) 
y = 1 + \ 
    2 
Các vấn đề liên quan