我对以下Python 2.7和Python 3.3在字符串格式中的行为感到困惑。这是一个关于逗号运算符如何与字符串表示类型交互的细节问题。
>>> format(10000, ",d")
'10,000'
>>> format(10000, ",")
'10,000'
>>> format(10000, ",s")
ValueError: Cannot specify ',' with 's'.
>>> "{:,}".format(10000)
'10,000'
>>> "{:,s}".format(10000)
ValueError: Cannot specify ',' with 's'.
让我困惑的是,
变量为什么工作,它没有显式的字符串表示类型。docs表示如果省略类型,则它“与s
相同”,但这里它的作用与s
不同。
我不认为这只是一个起皱/角落的情况,但是这个语法在文档中用作一个例子:'{:,}'.format(1234567890)
。当省略字符串表示类型时,Python中是否隐藏了其他“特殊”行为?也许代码真正做的不是“与s相同”,而是检查正在格式化的对象的类型?
参考PEP 378 -- Format Specifier for Thousands Separator
在您的示例中,您没有与字符串表示类型交互;而是与
int
表示类型交互。对象可以通过定义__format__
方法来提供自己的格式化行为。如PEP 3101所述:表示类型
s
不由int
对象实现是可以理解的(请参阅每个对象类型的文档表示类型列表here)。异常消息有点误导人。如果没有,
,问题就更清楚了:相关问题 更多 >
编程相关推荐