PEP 3101指定高级字符串格式化。除其他外,它定义了格式字符串的新语法规范(例如,{:.2f}
)以及自定义类型如何控制自己的格式。这是通过执行:Python PEP3101:为什么field_spec没有传递给__format__函数?
def __format__(value, format_spec):
# Your code here
字符串格式代码可以包括一个转换标志。例如:"{0!r:20}".format("Hello")
,其中!r
表示convert the the value to a string using repr()
。但是,__format__
仅获取冒号:
(即format_spec)后的值。我想知道原因(即设计决定,而不是代码)为什么?我认为提供!
之后的所有内容都会更加灵活。
不过是种浪费,因为你可以定义是否被用于两个部分'__format__'在一个更清洁的方式代表你的数据的其他方式。现在你需要把所有东西都放在规范中。谢谢你的帮助。 – Hernan
你会在':'之前的部分做什么?您将知道关键字参数的名称,或者位置参数的索引,以及可能使用的属性访问。这与格式无关! –
在':'之前,你唯一拥有的是域名和转换开关(所以'!r'或'!s');如果指定了后者,会导致**。**格式__()'方法**被忽略**,所以没有必要将'___格式__()'方法传递给该方法。 –