2012-06-11 26 views
27

Giả sử tôi có một chuỗi cực dài với các đối số mà tôi muốn tạo. Tôi biết bạn có thể tạo một chuỗi multiline vớiChuỗi nhiều dòng với các đối số. Làm thế nào để khai báo?

cmd = """line 1 
     line 2 
     line 3""" 

Nhưng bây giờ cho phép nói rằng tôi muốn vượt qua 1, 2, và 3 như các đối số.

này hoạt động

cmd = """line %d 
     line %d 
     line %d""" % (1, 2, 3) 

Nhưng nếu tôi có một chuỗi siêu dài với hơn 30 đối số, làm thế nào tôi có thể có thể vượt qua những tranh cãi trong nhiều dòng? Vượt qua chúng trong một dòng duy nhất đánh bại mục đích thậm chí cố gắng tạo ra một chuỗi đa dòng.

Cảm ơn bất kỳ ai trước vì sự giúp đỡ và thông tin chi tiết của họ.

Trả lời

19

Bạn có thể lạm dụng thuộc tính tiếp tục dòng của dấu ngoặc đơn ( và dấu phẩy ,.

cmd = """line %d 
     line %d 
     line %d""" % (
     1, 
     2, 
     3) 
+0

Cảm ơn rất nhiều. Chính xác những gì tôi đang tìm kiếm. Không bao giờ biết tôi có thể có nhiều dòng khi sử dụng dấu ngoặc vuông. Đây là sự trợ giúp tuyệt vời !!! – Quillion

2

này làm việc cho tôi:

cmd = """line %d 
     line %d 
     line %d""" % (
      1, 
      2, 
      3 
    ) 
3

Để có các đối số trong cùng một dòng họ được chèn vào, bạn có thể làm điều đó như thế này:

cmd = "line %d\n"%1 +\ 
     "line %d\n"%2 +\ 
     "line %d\n"%3 

[EDIT:] Trong trả lời nhận xét đầu tiên tôi đã đưa ra điều này:

cmd = "\n".join([ 
     "line %d"%1, 
     "line %d"%2, 
     "line %d"%3]) 
+0

Làm điều đó với hơn 30 đối số sẽ không hiệu quả lắm. '" ".join()' trên danh sách, mặt khác ... :) –

48

Bạn có thể sử dụng chức năng str.format(), cho phép đối số được đặt tên. Vì vậy,

'''line {0} 
line {1} 
line {2}'''.format(1,2,3) 

Bạn dĩ nhiên có thể mở rộng này sử dụng cú pháp *args Python để cho phép bạn vượt qua trong một tuple hoặc list.

args = (1,2,3) 
'''line {0} 
line {1} 
line {2}'''.format(*args) 

Nếu bạn thông minh có thể đặt tên lập luận của bạn, giải pháp mạnh mẽ nhất (mặc dù một gõ chuyên sâu nhất) sẽ được sử dụng cú pháp **kwargs Python để vượt qua trong một cuốn từ điển.

args = {'arg1':1, 'arg2':2, 'arg3':3} 
'''line {arg1} 
line {arg2} 
line {arg3}'''.format(**args) 

Để biết thêm thông tin về mini-ngôn ngữ str.format(), hãy vào đây: http://docs.python.org/library/string.html#format-string-syntax

+1

+1 Định dạng ** kwargs là rất tốt cho khả năng đọc cho nhiều kịch bản (mặc dù có lẽ không phải ví dụ của OP). – Darthfett

2

hơn Một biến thể với string.Format() - Chức năng.

s = "{0} " \ 
    "{1} " \ 
    "{2}" \ 
    .format("Hello", "world", "from a multiline string")  
print(s) 
1

Cách đơn giản nhất có thể được sử dụng literal string interpolation (có sẵn từ Python 3.6 trở đi và giả sử tất cả các đối số trong phạm vi).

cmd = f"""line {1} 
     line {2} 
     line {3}""" 
Các vấn đề liên quan