2010-11-13 22 views
331

Giống như C, bạn có thể chia một đường dài thành nhiều dòng ngắn. Nhưng trong Python, nếu tôi làm điều này, sẽ có một lỗi thụt lề ... Có thể không?Có thể chia một đường dài thành nhiều dòng trong Python

+1

có thể trùng lặp của [Làm thế nào tôi có thể thực hiện ngắt dòng (tiếp tục dòng) trong Python?] (Http://stackoverflow.com/questions/53162/how-can-i-do-a-line-break-line-continuation-in-python) – EnergyNumbers

Trả lời

413

Từ PEP 8 - Style Guide for Python Code:

Cách ưa thích của gói đường dài là sử dụng hàm ý dòng tiếp nối của Python bên trong dấu ngoặc đơn, dấu ngoặc và dấu ngoặc. Nếu cần, bạn có thể thêm một cặp ngoặc đơn bổ sung xung quanh một biểu thức, nhưng đôi khi sử dụng dấu gạch chéo ngược trông sẽ đẹp hơn. Đảm bảo thụt lề dòng tiếp tục một cách thích hợp.

Ví dụ về tiếp tục dòng ngầm:

a = some_function(
    '1' + '2' + '3' - '4') 

Về chủ đề của dòng-chia xung quanh một nhà điều hành nhị phân, nó tiếp tục nói: -

Trong nhiều thập kỷ phong cách khuyến cáo là để phá vỡ sau khi các toán tử nhị phân. Nhưng điều này có thể làm tổn thương khả năng đọc theo hai cách: các nhà khai thác có xu hướng phân tán trên các cột khác nhau trên màn hình và mỗi toán tử được di chuyển ra khỏi toán hạng của nó và lên dòng trước đó.

Trong mã Python, được phép ngắt trước hoặc sau toán tử nhị phân, miễn là quy ước nhất quán cục bộ. Đối với mã mới Kiểu của Knuth (ngắt dòng trước toán tử) được đề xuất.

Ví dụ về tiếp tục dòng rõ ràng:

a = '1' \ 
    + '2' \ 
    + '3' \ 
    - '4' 
+6

Đối với ví dụ thứ hai, nó không giống như dấu cách (mà bạn không thể nhìn thấy) sau '\' – cardamom

+0

@cardamom Vấn đề này không phải là một đặc tính của python; ví dụ, nếu bạn cố gắng viết một kịch bản lệnh shell, ví dụ, một vòng lặp 'for' để tạo các thư mục:' cho i trong dir1 \ '(dòng mới)' dir2 \ '(dòng mới)' dir3 \ '(dòng mới) '... mkdir $ i' để tập lệnh này chạy, không được có dấu cách sau dấu chéo ngược –

11

Nó hoạt động bằng Python quá:

>>> 1+\ 
     2+\ 
3 
6 
>>> (1+ 
      2+ 
3) 
6 
8

Theo như tôi biết, nó có thể được thực hiện. Python có tiếp tục dòng ngầm (bên trong dấu ngoặc đơn, dấu ngoặc và chuỗi) cho các chuỗi được trích dẫn ba lần ("""like this""") và sự thụt lề của các dòng tiếp tục không quan trọng. Để biết thêm thông tin, bạn có thể muốn đọc this bài viết về phân tích từ vựng, từ python.org.

+3

Chuỗi chỉ thực hiện tiếp tục ngầm bên trong chuỗi được trích dẫn ba lần. Đó là sự khác biệt giữa ba và đơn trích dẫn. –

163

Có nhiều cách để thực hiện.

1). Tuyên bố dài:

>>> def print_something(): 
     print 'This is a really long line,', \ 
       'but we can make it across multiple lines.' 

2). Sử dụng dấu ngoặc đơn:

>>> def print_something(): 
     print ('Wow, this also works?', 
       'I never knew!') 

3). Sử dụng \ một lần nữa:

>>> x = 10 
>>> if x == 10 or x > 0 or \ 
     x < 100: 
     print 'True' 

Trích dẫn PEP8:

Cách ưa thích của gói dài dòng là bằng cách sử dụng hàm ý tiếp tục dòng Python bên trong dấu ngoặc, dấu ngoặc và dấu ngoặc.Nếu cần, bạn có thể thêm một cặp dấu ngoặc đơn bổ sung xung quanh một biểu thức, nhưng đôi khi sử dụng dấu gạch chéo ngược trông tốt hơn. Đảm bảo thụt lề dòng tiếp 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ử, chứ không phải trước toán tử đó.

+0

Điều này xuất hiện trong một cuộc nói chuyện về phong cách mã tại PyOhio và chúng tôi đi đến kết luận rằng 2) là một cách tiêu chuẩn tốt để đi. Nó không hoàn hảo kể từ khi thay đổi các văn bản không phải là dễ dàng, nhưng ít nhất nó đọc ok. – Rick

+1

Tôi đã tìm kiếm ví dụ số 1 trong một thời gian dài. –

+0

@ user225312 bạn cũng có thể sử dụng mã '' 'dòng mới hơn' '' 'hoặc thói quen xấu này không? – onxx

12

Nếu bạn muốn gán một str dài để thay đổi, bạn có thể làm điều đó như sau:

net_weights_pathname = (
    '/home/acgtyrant/BigDatas/' 
    'model_configs/lenet_iter_10000.caffemodel') 

Đừng thêm bất kỳ dấu phẩy, hoặc bạn sẽ nhận được một tuple chứa nhiều strs!

+0

Điều này làm việc vì python tự động nối các chuỗi bên trong dấu ngoặc đơn, mà không cần phải đặt toán tử '+'. – dangonfast

8

Khi cố gắng để nhập văn bản liên tục (ví dụ, một truy vấn) không đặt dấu phẩy ở cuối dòng hoặc bạn sẽ nhận được một danh sách các chuỗi thay vì một chuỗi dài:

queryText= "SELECT * FROM TABLE1 AS T1"\ 
"JOIN TABLE2 AS T2 ON T1.SOMETHING = T2.SOMETHING"\ 
"JOIN TABLE3 AS T3 ON T3.SOMETHING = T2.SOMETHING"\ 
"WHERE SOMETHING BETWEEN <WHATEVER> AND <WHATEVER ELSE>"\ 
"ORDER BY WHATEVERS DESC" 

kinda như thế .

Có một nhận xét như thế này từ acgtyrant, xin lỗi, không thấy điều đó. :/

0

DB mã liên quan trông dễ nhìn hơn trong nhiều dòng, được bao bọc bởi một cặp dấu ngoặc kép ba:

SQL = """SELECT 
      id, 
      fld_1, 
      fld_2, 
      fld_3, 
      ...... 
     FROM some_tbl""" 

hơn một dòng dài khổng lồ sau:

SQL = "SELECT id, fld_1, fld_2, fld_3, .................................... FROM some_tbl" 
+1

Nó chỉ là một cách giải quyết, nhưng bằng cách sử dụng docstrings như chuỗi không phải là một cách pythonic để mã. –

Các vấn đề liên quan