格式化字符串的大多数pythonic方式

时间:2016-02-24 14:35:54

标签: python string python-2.7 formatting

问题:

我需要从不同的部分创建一个复杂的字符串(nbsp = u'\xa0', data['text'], delimeter)。

我知道3种常见的解决方案:

res = '*{nbsp}{nbsp}{nbsp}{nbsp}{0}*{1}'.format(data['text'], delimeter, nbsp=nbsp) # seems unicode error-prone way

res = '*' + 4 * nbsp + data['text'] + '*' + delimeter

res = ''.join(['*', 4 * nbsp, data['text'], '*', delimeter])

旧的%字符串格式化方式还有另一种方法,但它看起来像是一种传统方式。

那么哪一个最pythonic或者对于这种情况可能更合适?

3 个答案:

答案 0 :(得分:3)

通过统一使用关键字参数可以改善您的第一种方法。

u'*{nbsps}{text}*{delimiter}'.format(nbsps=4*nbsp,
                                     text=data['text'],
                                     delimiter=delimiter)

格式字符串清楚地表明它包含三个更复杂的块,每个块在unicode.format的参数中以相同的方式定义。

答案 1 :(得分:1)

“Pythonic”,据我所知,意味着“可以在一年没有看到代码后立即破译”。我会在戒指中扔下面的帽子:

res = "*%s%s*%s" % (4*nbsp, str(data["text"]), delimiter)

即使您认为它是遗留的,因为可以理解。阅读它并将其与反编译上述建议进行比较。

答案 2 :(得分:0)

第三个不是好的解决方案,但前两个是足够好的。但我更喜欢把它混合起来试试这个:

str("*"+4*"{0}"+"{1}"+"*"+"{2}").format(nbsp, data['text'], delimeter)