Python中的!r和%r有什么区别?

b_p*_*kes 32 python string format string-formatting

正如标题所述,这两面旗帜有什么区别?看来他们都使用repr()将值转换为字符串?此外,在这行代码中:

"{0!r:20}".format("Hello")  
Run Code Online (Sandbox Code Playgroud)

!r前面的0是什么?

Mar*_*ers 56

%rstr.format()格式化操作中不是有效的占位符; 它只适用于旧式%字符串格式.它确实通过repr()函数将对象转换为表示.

In 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")  
Run Code Online (Sandbox Code Playgroud)

除非您使用的是Python 2.6,否则可以省略它,因为没有索引或名称的插槽会自动编号; 第一个{}0,第二{}个是索引处的第二个参数1等.

  • 谢谢,您能否澄清“这也意味着您现在可以使用字符串的所有格式代码”的意思? (2认同)
  • `:`冒号后面的代码被传递给`object .__ format __()`方法,因此是特定于类型的.浮点数接受字符串中的不同格式代码.因此,如果对象是浮点数,则在添加`!r`时使用不同的格式代码. (2认同)