【发布时间】:2015-09-14 12:09:48
【问题描述】:
我试图打印布尔表达式的真值表。在执行此操作时,我偶然发现了以下内容:
>>> format(True, "") # shows True in a string representation, same as str(True)
'True'
>>> format(True, "^") # centers True in the middle of the output string
'1'
只要我指定了格式说明符,format() 就会将 True 转换为 1。我知道bool 是int 的子类,所以True 的计算结果为1:
>>> format(True, "d") # shows True in a decimal format
'1'
但是为什么在第一个示例中使用格式说明符会将'True' 更改为1?
我转向docs for clarification。它唯一说的是:
一般约定是空格式字符串 (
"") 产生的结果与您在值上调用str()时产生的结果相同。非空格式字符串通常会修改结果。
因此,当您使用格式说明符时,字符串会被修改。但是,如果仅指定了对齐运算符(例如^),为什么要从True 更改为1?
【问题讨论】:
-
“一般约定是,空格式字符串 ("") 产生的结果与您在值上调用 str() 时产生的结果相同。非空格式字符串通常会修改结果。” -- docs
-
我不知道为什么会这样,但如果你想修复它,你可以这样做
format(str(True),"^") -
谢谢,我已经修好了,但我只是好奇“为什么”:)
-
我的猜测是它与
'^'运算符的隐式转换有关,尽管这很奇怪。另请注意,'^'是 align-center 运算符,而不是宽度运算符。 -
是的,它很很奇怪。更正了问题。
标签: python python-2.7 boolean string-formatting string.format