在 Python 中创建新的转换说明符
Creating new conversion specifier in Python
在 python 中,我们有像
这样的转换说明符
'{0!s}'.format(10)
打印
'10'
如何制作自己的转换说明符,例如
'{0!d}'.format(4561321)
按以下格式打印整数
4,561,321
或者转成二进制如
'{0!b}'.format(2)
输出
10
有哪些类需要继承和修改的功能?如果可能请提供一个小例子。
谢谢!!
你想做的是不可能的,因为内置类型无法修改,文字总是引用内置类型。
有一种特殊的方法来处理值的格式,即__format__
,但它只处理格式字符串,不处理转换说明符,即您可以自定义如何处理{0:d}
但不是 {0!d}
的样子。唯一可以与 !
一起使用的是 s
和 r
.
请注意,d
和 b
已经作为格式说明符存在:
>>> '{0:b}'.format(2)
'10'
在任何情况下,您都可以实现自己的 class 来处理格式设置:
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
在 python 中,我们有像
'{0!s}'.format(10)
打印
'10'
如何制作自己的转换说明符,例如
'{0!d}'.format(4561321)
按以下格式打印整数
4,561,321
或者转成二进制如
'{0!b}'.format(2)
输出
10
有哪些类需要继承和修改的功能?如果可能请提供一个小例子。
谢谢!!
你想做的是不可能的,因为内置类型无法修改,文字总是引用内置类型。
有一种特殊的方法来处理值的格式,即__format__
,但它只处理格式字符串,不处理转换说明符,即您可以自定义如何处理{0:d}
但不是 {0!d}
的样子。唯一可以与 !
一起使用的是 s
和 r
.
请注意,d
和 b
已经作为格式说明符存在:
>>> '{0:b}'.format(2)
'10'
在任何情况下,您都可以实现自己的 class 来处理格式设置:
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