2011-01-30 34 views

Trả lời

20
"{name} is a {adjective} {noun} that {verb}".format(**locals()) 
  • locals() đưa ra một tham chiếu đến không gian tên hiện tại (như một cuốn từ điển).
  • **locals() bỏ từ điển đó vào đối số từ khóa (f(**{'a': 0, 'b': 1})f(a=0, b=1)).
  • .format()"the new string formatting", có thể bằng cách này nhiều hơn (ví dụ: {0.name} cho thuộc tính tên của đối số vị trí đầu tiên).

Hoặc, string.template (một lần nữa, với người dân địa phương nếu bạn muốn tránh dư thừa {'name': name, ...} dict literal).

+3

Để biết thêm chi tiết và tùy chọn: http://docs.python.org/library/stdtypes.html#string-formatting – Harmen

+0

@Harem: +1 Tôi đã thực sự tìm kiếm liên kết đó, nhưng đã tìm thấy PEP trước ... phải một số lỗ hổng trong thuật toán tìm kiếm của tôi. – delnan

+1

Chuyển địa phương() vào một hàm thường là một ý tưởng rất tồi. Nó dẫn đến tham số creep, nơi mà nó không thể cho biết các biến nào thực sự được dự định để được truyền đi và thực ra là những người dân địa phương. –

4

Đối với python 2 làm:

print name,'is a',adjective,noun,'that',verb 

Đối với python 3 thêm parens:

print(name,'is a',adjective,noun,'that',verb) 

Nếu bạn cần lưu nó vào một chuỗi, bạn sẽ phải nối với toán tử + và bạn sẽ phải chèn dấu cách. print chèn một khoảng trống ở tất cả các , trừ khi có dấu phẩy ở cuối các tham số, trong trường hợp này nó sẽ bỏ qua dòng mới.

Để lưu vào chuỗi var:

result = name+' is a '+adjective+' '+noun+' that '+verb 
+0

Lưu ý rằng trong Pyhon 2, đây in một tuple thay vì một số chuỗi;) (chỉ việc kéo thả dấu ngoặc) – delnan

+0

cố định nhờ delnan. –

5

sử dụng string.Template

>>> from string import Template 
>>> t = Template("$name is a $adjective $noun that $verb") 
>>> t.substitute(name="Lionel", adjective="awesome", noun="dude", verb="snores") 
'Lionel is a awesome dude that snores' 
+0

Tuyệt vời.Flattery giúp bạn * ở mọi nơi * – Lionel

+0

Bất cứ điều gì, phải không? :) – bgporter

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