1. class reprlib.Repr

该类与内置函数repr()功能类似,提供对实现函数有用的格式化服务。该类添加了不同对象类型的大小限制,以避免生成过长的表示。

2. reprlib.aRepr

这是Repr的一个实例,用来提供repr()功能。修改属性可以影响大小限制。

3. reprlib.repr(obj)

是aRepr的repr()方法。和内置repr()功能类似。
另外,本模块还提供了一个修饰器,用来检测__repr__()迭代请求并用占位符字符串代替。

@reprlib.recursive_repr(fillvalue="…")

当检测到一个迭代请求时,就会用fillvallue的值来代替。

from reprlib import recursive_repr
class Mylist(list):
    @recursive_repr()
    def __repr__(self):
        return '<' + '|'.join(map(repr, self)) + '>'
m = Mylist('abc')
m.append(m) # 进行了迭代请求,...进行代替
m.append('abc')
m.append('X')
print(m)

4. Repr对象

Repr实例有一系列可用于提供大小限制的属性和格式化特殊对象类型的方法。

4.1. Repr.maxlevel

迭代显示的最大深度。默认为6。

4.2.Repr.maxdict/Repr.maxlist/Repr.maxtuple/Repr.maxset/Repr.maxfrozenset/Repr.maxdeque/Repr.maxarray

对命名对象类型表示的条目数的限制。其中maxdict默认为4,maxarray为5,其余均为6。

4.3. Repr.maxlong

整数值的最大显示字符数。多余的数字会从中间开始抛弃。默认为40。

4.4. Repr.maxstring

字符串的最大显示字符数。默认为30。

4.5. Repr.maxother

用于控制对象类型的大小,该对象类型在Repr对象中没有可用的特殊格式化方法。默认为20。

4.6. Repr.repr(obj)

等价于内置repr()。

4.7. Repr.repr1(obj, level)

使用repr()的递归实现。根据obj类型决定格式化方法。

4.8. Repr.repr_TYPE(obj, level)

方法名是基于类型名称的,该方法就会实现特定类型的格式化方法。在方法名中,TYPE将被’_’.join(type(obj).name.split())取代。对这些方法的分派由repr1()处理。需要递归格式化一个值的特定类型方法,应这样调用:self.repr1(subobj, level - 1)

5. Repr对象的子类化

使用Repr.repr1()的动态分派可以允许Repr的子类添加一些功能,用来支持新的内置对象类型或优化已支持类型的处理。如下例:

import reprlib
import sys
class MyRepr(reprlib.Repr):
    def repr_TextIOWrapper(self, obj, level):
        if obj.name in {'<stdin>', '<stdout>', '<stderr>'}:
            return obj.name
        return repr(obj)
aRepr = MyRepr()
print(aRepr.repr(sys.stdin))
print(aRepr.repr_TextIOWrapper(sys.stdin,1))

基础即基石,一步一阶梯

reprlib库学习笔记主要内容1. class reprlib.Repr该类与内置函数repr()功能类似,提供对实现函数有用的格式化服务。该类添加了不同对象类型的大小限制,以避免生成过长的表示。2. reprlib.aRepr这是Repr的一个实例,用来提供repr()功能。修改属性可以影响大小限制。3. reprlib.repr(obj)是aRepr的repr()方法。和内置repr()功能类似。另外,本模块还提供了一个修饰器,用来检测__repr__()迭代请求并用占位符字符串代替。
文章目录前言一、格式化输出二、模板三、使用二进制数据记录格式四、多线程五、日志六、弱引用七、用于操作列表的工具八、十进制浮点运算python官方文档链接python官方标准链接 余生平,怎一个懒字了得。 一、格式化输出 reprlib 模块提供了一个定制化版本的 repr() 函数,用于缩略显示大型或深层嵌套的容器对象: >>> import reprlib >>> reprlib.repr(set('supercalifragilisticexpialidoci
Python打印值的时候会保持该值在Python代码中的状态,不是用户所希望看到的状态。而使用print打印值则不一样,print打印出来的值是用户所希望看到的状态。 例如:>>> "Hello, world!" 'Hello, world!' # Python打印出来的值是给python理解的,这里python理解为字符串,所以带着引号 >>> 1000L # python
python装饰器的使用 其中recursive_repr装饰器的目的是防止递归,提供指定返回值fillvalue 在实例化Mylist为对象m后,再递归调用m.append(m),执行两次wrapper。原因是第一次执行wrapper后进入def __repr__后,有一个递归对象m,再执行wrapper。 from _thread import get_ident def recursive_repr(fillvalue=',,,'):
python中,sys模块里面有一个getsizeof函数,其可以获取某个对象的内存占用,但是要注意的是,该函数只能获取对象本身直接占用的内存,该对象所指向的引用所占据的内存并不会被计算在内;python中,比如当对象是一个容器时,那么getsizeof函数就无法获取该容器内部所有内容的内存占用了,返回的只是容器本身的内存占用,比如字典。 对此,官方文档给出了一种途径...
Python中有些方法名、属性名的前后都添加了双下划线,这种方法、属性通常都属于Python的特殊方法和特殊属性,开发者可以通过重写这些方法或者直接调用这些方法来实现特殊的功能。其实前面见过的构造方法__init__() 就是一种特殊方法,开发者可以通过重写类中的__init__方法实现自己想要的初始化逻辑。 Python类中的特殊方法、特殊属性有些需要开发者重新写,有些则可以直接调用。 遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939 寻找有志同道合的小伙伴
百度的时候大部分时间是推荐安装Anaconda3 。Anaconda3 强大归强大,但是需要下载并且需要进行配置环境才可以用,如果觉得麻烦,不妨用下面的方式解决: 1.python怎么装matplotlib python安装"matplotlib"的步骤如下: (1)首先确保已经安装python,然后用pip来安装matplotlib模块。 (2)进入到cmd窗口下,执行python -m pip...
运行python程序时,经常会遇到一种错误类型:ImportError: No module named xxx,其中xxx一般是一个。比如,我最近跑GitHub上的代码时,就提示ImportError: No module named librosa。有两种方法可以解决这个问题。 方法1:检查python中是否已安装该。首先在命令行中输入 pip list,检测python是否已安装该。...