我喜欢扩展Formatter的想法,使其允许任意字段名称(整数,带有冒号的字段名称等)。实现可能如下所示:
我喜欢扩展Formatter的想法,使其允许任意字段名称(整数,带有冒号的字段名称等)。实现可能如下所示:
import string, re
class QuFormatter(string.Formatter):
def _quote(self, m):
if not hasattr(self, 'quoted'):
self.quoted = {}
key = '__q__' + str(len(self.quoted))
self.quoted[key] = m.group(2)
return '{' + m.group(1) + key + m.group(3) + '}'
def parse(self, format_string):
return string.Formatter.parse(self,
re.sub(r'{([^}`]*)`([^}`]*)`([^}]*)}', self._quote, format_string))
def get_value(self, key, args, kwargs):
if key.startswith('__q__'):
key = self.quoted[key]
return string.Formatter.get_value(self, key, args, kwargs)
使用方法:
d = {'5': 'you', '6': 'me', "okay":1, "weird:thing!": 123456}
print QuFormatter().format(
'hello there {`5`} {`6`:20s}--{okay}--{`weird:thing!`:20,d}',
**d)
所以用反引号包裹的字段会被视为文字字面量。
str
作为变量名,因为这会覆盖内置的str
类。 - Volatility{[5]}
将起作用。 - Blender