2016-02-19 49 views
-2

我有我使用的代碼執行過程中幾次只有一個獨特的varible some_var格式的字符串模板:如何擺脫str.format中的重複變量?

message_tmpl = '{}. Path {} cannot be extracted' 
some_var = '123' 
condition = True # or False... 
if condition: 
    message = message_tmpl.format('True message', some_var) 
else: 
    message = message_tmpl.format('False Message', some_var) 

我怎麼能改善這種流量,以避免每次路過some_var

我一直在努力,但沒有成功運行,下面的代碼片段:

message_tmpl = '{msg}. Path {some_var} cannot be extracted'.format(some_var=some_var) 

回答

1

你只需要一個額外的一對大括號周圍{msg},像這樣:

>>> some_var = '123' 
>>> message_tmpl = '{{msg}}. Path {some_var} cannot be extracted'.format(some_var=some_var) 
>>> message_tmpl.format(msg='a message') 
'a message. Path 123 cannot be extracted' 

在一般情況下,嵌套如果你的模板需要逐漸填充,大括號就是你需要的。多一點演示:

>>> template = '{} {{}} {{{{}}}}' 
>>> template.format('foo') 
'foo {} {{}}' 
>>> template.format('foo').format('bar') 
'foo bar {}' 
>>> template.format('foo').format('bar').format('baz') 
'foo bar baz' 
2

這可以通過模板的特定格式來完成:通過'{}'的第一個格式模板:

message_tmpl = '{}. Path {} cannot be extracted'.format('{}', some_var) 

或者

message_tmpl = '{msg}. Path {some_var} cannot be extracted'.format(msg='{}', some_var=some_var) 

以這種方式創建模板後,通過應從下一個格式中刪除some_var,並且只有msg通過。

1

你也可以使用舊式新樣式格式:

message_tmpl = '{msg}. Path %(some_var)s cannot be extracted' % {'some_var': some_var}