6

我知道在 python3 中,您可以执行以下操作:

>>> '{0} {1} {0}'.format(13, 42)
'13 42 13'

因此,您多次使用相同的参数。我想做相反的事情。我有一个数字序列。我想以某种方式使用单个格式说明符打印它们,但我没有看到一种方法来指示给format定标识符应该使用下一个 N 参数的语法。我可以使用减少

>>> reduce(lambda out,x: out + '{:02X}'.format(x), b'\x60\x0d\x1a\xdd', '')
'600D1ADD'

但我希望有一个单一的格式调用,因为我想在我的其他格式序列周围放置一些其他字符。

4

3 回答 3

5

像这样的东西怎么样:

list = [13, 14, 42, 43]
out = ''.join([ '{0}'.format(x) for x in list ])

于 2013-01-08T21:59:19.393 回答
4

没有任何方法可以准确地做到这一点。您可以做的是预先格式化您的数字列表,然后将该格式化的字符串作为单个项目传递给第二轮格式化:

>>> nums = (13, 42)
>>> '{0} is {1}'.format('my stuff', ''.join('{:02X}'.format(a) for a in nums))
'my stuff is 0D2A'

如果您愿意,您可以编写一个自定义 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'
于 2013-01-05T05:46:46.063 回答
3

我在这些方面使用了一些东西:

>>> list = [13, 14, 42, 43]
>>> ('0x' + len (list) * '{:02X}') .format (*list)
'0x0D0E2A2B'
于 2013-11-03T06:08:07.013 回答