今天阅读源码时发现一个没见过的用法:
f"{class_name}(status_code={self.status_code!r}, detail={self.detail!r})"
对此我不禁感觉好奇,就去查阅了一下资料:
转换字段在格式化之前会导致类型强制。通常,格式化值的工作是由值本身的format () 方法完成的。但是,在某些情况下,需要强制将类型格式化为字符串,覆盖其自己的格式化定义。通过在调用format ()之前将值转换为字符串,绕过了正常的格式化逻辑。
当前支持三种转换标志:'!s' 调用 str() , '!r' 调用 repr() , '!a' 调用 ascii()。
而repr()与str()有什么区别呢,我们一起来看一下他们的定义
str()函数得到的字符串可读性好,用于将值转化为适于人阅读的形式;
repr()函数得到的字符串通常可以用来重新获得该对象,将对象转化为供解释器读取的形式。
>>> a = 'python'
>>> repr(a)
"'python'"
>>> a = 'python'
>>> str