在python中,我们有转换说明符,如
'{0!s}'.format(10)
哪个打印
'10'
如何制作自己的转换说明符,例如
'{0!d}'.format(4561321)
以下列格式打印整数
4,561,321
或将其转换为二进制
'{0!b}'.format(2)
哪个打印
10
我需要继承哪些类,需要修改哪些功能?如果可能,请提供一个小例子。
谢谢!!
在python中,我们有转换说明符,如
'{0!s}'.format(10)
哪个打印
'10'
如何制作自己的转换说明符,例如
'{0!d}'.format(4561321)
以下列格式打印整数
4,561,321
或将其转换为二进制
'{0!b}'.format(2)
哪个打印
10
我需要继承哪些类,需要修改哪些功能?如果可能,请提供一个小例子。
谢谢!!
您想要做的事情是不可能的,因为无法修改内置类型,并且文字总是引用内置类型。
有一种特殊的方法来处理值的格式,也就是说__format__
,它只处理格式字符串,而不是转换说明符,即您可以自定义{0:d}
处理方式,但不能自定义处理{0!d}
方式。唯一可以使用!
的是s
and r
。
请注意,d
andb
已经作为格式说明符存在:
>>> '{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
尽量不要自己制作并尝试使用 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了解更多信息。