1

在python中,我们有转换说明符,如

'{0!s}'.format(10)

哪个打印

'10'

如何制作自己的转换说明符,例如

'{0!d}'.format(4561321)

以下列格式打印整数

4,561,321

或将其转换为二进制

'{0!b}'.format(2)

哪个打印

10

我需要继承哪些类,需要修改哪些功能?如果可能,请提供一个小例子。

谢谢!!

4

2 回答 2

2

您想要做的事情是不可能的,因为无法修改内置类型,并且文字总是引用内置类型。

有一种特殊的方法来处理值的格式,也就是说__format__,它只处理格式字符串,而不是转换说明符,即您可以自定义{0:d}处理方式,但不能自定义处理{0!d}方式。唯一可以使用!的是sand r

请注意,dandb已经作为格式说明符存在:

>>> '{0:b}'.format(2)
'10'

在任何情况下,您都可以实现自己的处理格式的类:

class MyInt:
    def __init__(self, value):
        self.value = value
    def __format__(self, fmt):
        if fmt == 'd':
            text = list(str(self.value))
        elif fmt == 'b':
            text = list(bin(self.value)[2:])
        for i in range(len(text)-3, 0, -3):
            text.insert(i, ',')
        return ''.join(text)

用作:

>>> '{0:d}'.format(MyInt(5000000))
5,000,000
>>> '{0:b}'.format(MyInt(8))
1,000
于 2016-11-29T08:12:31.077 回答
1

尽量不要自己制作并尝试使用 python 中已经存在的默认函数。您可以使用,

'{0:b}'.format(2)  # for binary
'{0:d}'.format(2)  # for integer
'{0:x}'.format(2)  # for hexadecimal
'{0:f}'.format(2)  # for float
'{0:e}'.format(2)  # for exponential

请参阅https://docs.python.org/2/library/string.html#formatspec了解更多信息。

于 2016-11-29T08:20:00.633 回答