正如标题所述,这两个标志有什么区别?看来他们都使用repr()将值转换为字符串? 此外,在这行代码中:Python中!r和%r有什么区别?
"{0!r:20}".format("Hello")
!r前面的0做什么?
正如标题所述,这两个标志有什么区别?看来他们都使用repr()将值转换为字符串? 此外,在这行代码中:Python中!r和%r有什么区别?
"{0!r:20}".format("Hello")
!r前面的0做什么?
%r
在str.format()
格式操作中不是有效的占位符;它只适用于old-style %
string formatting。它确实通过repr()
函数将对象转换为表示形式。
在str.format()
,!r
是等价的,但这也意味着您现在可以使用所有format codes作为字符串。通常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")
除非你正在使用Python 2.6,你可以省略这个因为没有索引或名称自动编号插槽;第一{}
为0
,第二{}
发生在指数1
第二个参数,等等
谢谢,你能澄清你的意思是“this也意味着你现在可以使用字符串的所有格式代码“? –
':'冒号后面的代码被传递给'object .__格式的__()'方法,因此是类型特定的。浮点数字接受来自字符串的不同格式化代码。因此,如果对象是一个浮点数,那么当你添加'!r'时,你会使用不同的格式化代码。 –
的0表示“使用0号位置参数” - 你只需要它,如果你的意思是使用的位置参数之一不止一次或者你需要支持Python 2.6。 ''{} {}“'.format(...)'被自动编号,以便在Python 2.7和3.x中被视为”{0} {1}“。 – lvc
可能重复的[Python字符串格式:%与.format](http://stackoverflow.com/questions/5082452/python-string-formatting-vs-format) –