我知道在python3中,你可以这样做:
>>> '{0} {1} {0}'.format(13, 42)
'13 42 13'
Run Code Online (Sandbox Code Playgroud)
所以你多次使用相同的参数.我想做相反的事情.我有一系列数字.我想以某种方式使用单个格式说明符打印它们,但是我没有看到一种方法来向format
语法指示给定标识符应该使用下一个N个参数.我可以使用减少
>>> reduce(lambda out,x: out + '{:02X}'.format(x), b'\x60\x0d\x1a\xdd', '')
'600D1ADD'
Run Code Online (Sandbox Code Playgroud)
但是我希望能有一个单一的格式调用,因为我想要放置一些其他格式的字符串.
没有任何方法可以完全做到这一点。您可以做的是预先格式化数字列表,然后将该格式化字符串作为单个项目传递到第二轮格式化:
>>> nums = (13, 42)
>>> '{0} is {1}'.format('my stuff', ''.join('{:02X}'.format(a) for a in nums))
'my stuff is 0D2A'
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以编写一个自定义 Formatter 子类,该子类接受数字序列作为要格式化的单个项目,并将它们全部格式化。那可以让我们做类似的事情myFormatter.format('{0} is {1:list}', 'my stuff', (13, 42))
。它的工作原理如下:
class ListFormatter(string.Formatter):
def format_field(self, value, spec):
if spec == 'list':
return ''.join('{:02X}'.format(a) for a in value)
else:
return super(ListFormatter, self).format_field(value, spec)
>>> lf = ListFormatter()
>>> lf.format('{0} is {1:list}', 'my stuff', [1, 43])
'my stuff is 012B'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3589 次 |
最近记录: |