Python中的 !r 和 !s 的字符串格式区别

!s(apply str())和!r(apply repr())可用于在格式化之前转换值。

字符串之间的区别很容易看出来(因为repr字符串将包含外部引号):

>>> 'foo {!s}'.format('bar')
'foo bar'
>>> 'foo {!r}'.format('bar')
"foo 'bar'"

这两种方法之间的区别实际上主要取决于要格式化的对象。对于许多对象(例如那些不覆盖该__str__方法的对象),格式化输出将没有差异。


在python中,有两种相当自然的选择来获取… strrepr的字符串表示形式。 str通常更人性化,repr更精确。也许官方文档是寻找差异的最佳地方:

object.__repr__(self)

  • repr()内置函数调用以计算对象的“正式”字符串表示形式。如果可能的话,这应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值的对象(在适当的环境下)。如果这不可能,<...some useful description...>则应返回形式的字符串。返回值必须是一个字符串对象。如果定义了一个类,__repr__()但未定义__str__(),则__repr__()当需要该类的实例的“非正式”字符串表示形式时,也会使用该类。

  • 这通常用于调试,因此重要的是,表示形式必须信息丰富且明确。

object.__str__(self)

  • 由str(object)和内置函数format()和print()调用,以计算对象的“非正式”或可很好打印的字符串表示形式。返回值必须是一个字符串对象。
  • 此方法的不同之处在于,object.__repr__()不期望__str__()返回有效的Python表达式:可以使用更方便或更简洁的表示形式。
  • 内置类型object invokes定义的默认实现object.__repr__()

str.format中,!s选择用于str设置对象格式,而!r选择repr设置值格式。


最后再写个例子来更加的认识!r:🤭🤭🤭🤭🤭🤭🤭🤭🤭

name = '全洛'
line = 'Hello, World'
hi = f'{name}: {line}'
print(f'{hi!r}')

输出结果为:

'全洛: Hello, World'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全 洛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值