2011-02-08 42 views
19

Tôi cố gắng để xây dựng một chuỗi định dạng với lập luận lười biếng, ví dụ: Tôi cần SMTH như:python, định dạng chuỗi

"%s \%s %s" % ('foo', 'bar') # "foo %s bar" 

làm thế nào tôi có thể làm điều này?

Trả lời

30
"%s %%s %s" % ('foo', 'bar') 

bạn cần %%

2
"%s %%s %s" % ('foo', 'bar') # easy! 

Ký tự đôi% cho phép bạn đặt% vào chuỗi định dạng.

+1

giới hạn 30 ký tự ngu ngốc:/ –

+0

Tôi đồng ý. :-) [trên nhận xét, quá] – payne

1

Chỉ cần sử dụng một biểu tượng tỷ lệ phần trăm giây.

In [17]: '%s %%s %s' % ('foo', 'bar') 
Out[17]: 'foo %s bar' 
4
>>> "%s %%s %s" % ('foo', 'bar') 
'foo %s bar' 
2

%% thoát biểu tượng %. Vì vậy, về cơ bản bạn chỉ phải viết:

"%s %%s %s" % ('foo', 'bar') # "foo %s bar" 

Và nếu bao giờ bạn cần phải ra một tỷ lệ phần trăm hoặc một cái gì đó:

>>> "%s %s %%%s" % ('foo', 'bar', '10') 
'foo bar %10' 
17

với python 2.6:

>>> '{0} %s {1}'.format('foo', 'bar') 
'foo %s bar' 

hoặc với python 2.7:

>>> '{} %s {}'.format('foo', 'bar') 
'foo %s bar' 
0

Nếu bạn không 'T biết thứ tự các đối số sẽ được suplied, bạn có thể sử dụng chuỗi mẫu

Dưới đây là một lớp chứa tự mà đặt ra như là một str với chức năng này (chỉ dành cho đối số từ khóa)

class StringTemplate(str): 
    def __init__(self, template): 
     self.templatestr = template 

    def format(self, *args, **kws): 
     from string import Template 
     #check replaced strings are in template, remove if undesired 
     for k in kws: 
      if not "{"+k+"}" in self: 
       raise Exception("Substituted expression '{k}' is not on template string '{s}'".format(k=k, s=self)) 
     template= Template(self.replace("{", "${")) #string.Template needs variables delimited differently than str.format 
     replaced_template= template.safe_substitute(*args, **kws) 
     replaced_template_str= replaced_template.replace("${", "{") 
     return StringTemplate(replaced_template_str) 
0

Python 3.6 hiện nay hỗ trợ nội suy chuỗi chữ viết tắt với PEP 498. Đối với trường hợp sử dụng của bạn, cú pháp mới cho phép:

var1 = 'foo' 
var2 = 'bar' 
print(f"{var1} %s {var2}") 
Các vấn đề liên quan