2016-02-24 176 views
2

問題最Python的方式:格式化字符串

我需要創建一個不同的部分(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

您可以通過統一使用關鍵字參數來改善您的第一種方法。

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

格式字符串清楚地表明,它包含三個更復雜的塊,其中的每一個以相同的方式被定義在參數unicode.format

0

第三個不是很好的解決方案,但前兩個就足夠了。但我更喜歡混合,並嘗試此:

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

「Python化」,按照我的理解,意味着「可以在任何時間一年沒有看到的代碼之後被破譯」。我會引發以下帽子環:

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

即使你認爲這是舊的,因爲它是理解。閱讀並與反編譯上述建議進行比較。