Python 中的 !r 和 %r 有什么区别?
What is the difference between !r and %r in Python?
如标题所述,这两个标志有什么区别?似乎他们都使用 repr() 将值转换为字符串?
另外,在这行代码中:
"{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"
。您也可以使用 named 参数,并将对象作为关键字参数传递:
"{greeting!r:20}".format(greeting="Hello")
除非您使用的是 Python 2.6,否则您可以省略此项,因为没有索引或名称的插槽会自动编号;第一个 {}
是 0
,第二个 {}
在索引 1
处接受第二个参数,等等
如标题所述,这两个标志有什么区别?似乎他们都使用 repr() 将值转换为字符串? 另外,在这行代码中:
"{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"
。您也可以使用 named 参数,并将对象作为关键字参数传递:
"{greeting!r:20}".format(greeting="Hello")
除非您使用的是 Python 2.6,否则您可以省略此项,因为没有索引或名称的插槽会自动编号;第一个 {}
是 0
,第二个 {}
在索引 1
处接受第二个参数,等等