如何摆脱str.format中的重复变量?

时间:2016-02-19 12:48:32

标签: python string formatting

我有一个字符串模板,在代码执行过程中我只使用一次格式化,只有一个唯一的变量some_var

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)

3 个答案:

答案 0 :(得分: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 :(得分:1)

您还可以使用新式格式的旧式格式:

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

答案 2 :(得分:1)

您需要在thread-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'