作为标题所述,这两个标志之间有什么区别?它们似乎都使用repr()将值转换为字符串?
此外,在这行代码中:
此外,在这行代码中:
此外,在这行代码中:
"{0!r:20}".format("Hello")
在 !r 前面加 0 是什么意思?
"{0!r:20}".format("Hello")
在 !r 前面加 0 是什么意思?
%r
不是str.format()
格式化操作中的有效占位符;它只在旧式%
字符串格式化中起作用。它确实通过repr()
函数将对象转换为表示形式。
在str.format()
中,!r
是等效的,但这也意味着您现在可以使用所有的格式代码来格式化字符串。通常str.format()
会调用对象本身的object.__format__()
方法,但是通过使用!r
,将使用repr(object).__format__()
代替。
还有!s
和(在Python 3中)!a
转换器;它们首先应用str()
和ascii()
函数。
0
前面的数字表示要使用 str.format()
方法中的哪个参数来填充该占位符;在您的情况下,位置参数 0
是 "Hello"
。您也可以使用 命名 参数,并将对象作为关键字参数传递:
"{greeting!r:20}".format(greeting="Hello")
{}
是0
,第二个{}
将在索引1
处获取第二个参数,以此类推。object.__format__()
方法,因此具有类型特定性。浮点数接受与字符串不同的格式化代码。因此,如果对象是浮点数,则使用的格式化代码与添加!r
时不同。 - Martijn Pieters
"{} {}"
.format(...)将自动编号,以便在 Python 2.7 和 3.x 中被视为
"{0} {1}".format(...)`。 - lvc