lzb1001 发表于 2022-12-28 18:50:49

%r 字符串(repr())的显示

>>> print('%r' % set())
{1, 2, 3}

>>> print('%r' % repr(set()))
'{1, 2, 3}'

看得有点晕:

1、两个有何区别?
2、%r(repr()分别什么意思
3、为什么可以去掉重复的1?
4、set():这是集合里列表的意思吗?

请大神指点解疑释惑,感谢!


The_stars 发表于 2022-12-28 20:26:06

1. %r的意思是以repr的形式格式化字符串, 另一种是%s, 表示使用str(x)获取字符串格式化
2. repr(x)就是调用对象x.__repr__方法获取表示字符串
3. set是集合, 集合元素是不能重复的. 所以会把1去除
4. set()是调用set构造方法, 传入一个参数: . 简单理解就是把列表转换成集合

print('%r', x) 和 print('%r', repr(x))在这里结果一样, 后者的写法是多余的, 还会影响程序执行性能

lxping 发表于 2022-12-28 20:27:18

repr函数解析:https://fishc.com.cn/thread-216410-1-3.html
set函数解析:https://fishc.com.cn/thread-203522-1-2.html

lzb1001 发表于 2022-12-28 21:03:48

本帖最后由 lzb1001 于 2022-12-28 21:15 编辑

The_stars 发表于 2022-12-28 20:26
1. %r的意思是以repr的形式格式化字符串, 另一种是%s, 表示使用str(x)获取字符串格式化
2. repr(x)就是调 ...

最后一行是不是写错了?是否应为:

print('%r' % x) 和 print('%r' % repr(x))

另外,两个打印输出的结果好像还是有点差别:

{1, 2, 3}:无单引号,对应__str__是给普通人员看的???


'{1, 2, 3}':有单引号,对应__repr__是给开发人员看的???

lzb1001 发表于 2022-12-28 21:04:32

lxping 发表于 2022-12-28 20:27
repr函数解析:https://fishc.com.cn/thread-216410-1-3.html
set函数解析:https://fishc.com.cn/thread- ...

感谢大神指点
页: [1]
查看完整版本: %r 字符串(repr())的显示