描述repr() 函数将对象转化为供解释器读取的形式。语法以下是 repr() 方法的语法:repr(object)参数object -- 对象。返回值返回一个对象的 string 格式。 ----实例以下展示了使用 repr() 方法的实例:>>>s = 'RUNOOB'>>> repr(s)"'RUNOOB'">>> dict = {'runoob': 'runoob.com', 'google ': 'google.com'};>>> repr(dict)"{'google': 'google.com', 'runoob': 'runoob.com'}">>>
参考链接: Python中的str()vs repr() Python repr() 或str() 函数 Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数。 repr()与反引号操作符``做的是完全一样的事情; repr()返回的是一个对象的"官方"字符串表示(对python比较友好),绝大多数情况下可以通过求值运算(使用内建函数eval())重新得到该对象 即 obj= eval(repr(obj)),也有情况下,不能够通过eval()得到原来的对象: str() 生成一个对象的可读性好的字符串表示(对用户比较友好),它返回的结果通常无法用于eval(
总的来说 str():将传入的值转换为适合人阅读的字符串形式 repr():将传入的值转换为 Python 解释器可读取的字符串形式 传入整型 # number resp = str(1) print( resp, type(resp), len(resp)) resp = str(1.1) print(resp, type(resp), len(resp)) resp = repr(1) print (resp, type(resp), len(resp)) resp = repr(1.1) print(resp, type(resp), len(resp)) # 输出结果 1 <class ' 1 1.1 <class 'str'> 3 传入字符串 # string resp = str("test") print(resp, type(resp), len(resp)) resp = repr ("test") print(resp, type(resp), len(resp)) # 输出结果 test <class 'str'> 4 'test' <class 'str'> 6 repr
repr(object)返回对象的字符串形式。>>> a = 'hello'>>> repr(a)"'hello'"返回的字符串形式可以通过 eval()函数获取到本来的值。 >>> eval(repr(a))'hello'对于一般的实例对象,返回的是由模块、类型及内存地址组成的字符串对象。 可以通过定义类的私有方法 __repr__()来自定义返回的值。 def __repr__(self):... return ('hello' + self.name)...>>> a = A('tom')>>> repr(a)'hellotom'
讲解pytorch报错 "Unable to get repr for"在使用PyTorch进行深度学习任务时,有时可能会遇到一些报错信息,其中一个比较常见的报错是 "Unable to get repr 报错原因这个报错信息的意思是PyTorch无法提供一个合适的表示(repr)方式来展示你定义的某个对象。当PyTorch打印对象时,它会寻找该对象的__repr__方法来生成可读的表示形式。 然而,某些对象可能缺少或不正确地实现了__repr__方法,导致报错。解决方案要解决 "Unable to get repr for" 报错,可以采取以下几种方法:1. 检查自定义类的__repr__方法如果你使用了自定义的类,并且报错信息指向该类的实例对象,那么首先要检查该类是否正确地实现了__repr__方法。 ,而不会报错 "Unable to get repr for"。 这个示例代码展示了一个实际场景中遇到报错的情况,并通过定义正确的 __repr__ 方法解决了这个问题。
为什么要讲 __repr__ 在 Python 中,直接 print 一个实例对象,默认是输出这个对象由哪个类创建的对象,以及在内存中的地址(十六进制表示) 假设在开发调试过程中,希望使用 print 实例对象时,输出自定义内容,就可以用 __repr__ 方法了 或者通过 repr() 调用对象也会返回 __repr__ 方法返回的值 是不是似曾相识....没错..和 __str__ 一样的感觉 代码栗子 class A: pass def __repr__(self): a = A() print(a) print(repr(a)) print(str(a)) # 输出结果 __() 会返回和实例对象 <类名 object at 内存地址> 有关的信息 重写 __repr__ 方法 class PoloBlog: def __init__(self): str() 和 repr() 的区别 https://www.cnblogs.com/poloyy/p/15253032.html
def __repr__(self): ... 等容器中存储对象的时候,我们打印看到的都是repr的内容,我们把上面的tom存到列表里, 然后打印查看如下: >>> print([tom]) [__repr__: people name is Tom def __repr__(self): ... r})') 在最后的repr的返回中我们用了! r 这个意味着我们要的repr(self.name) repr(self.age)而不是要str(self.name) str(self.age)的返回结果
main__.Person object at 0x0042A6A0>输出实例化的Person类,返回的是一个在内存中的对象,事实上,当输出person实例对象时,实际上输出的是person对象上__repr __repr__) # <method-wrapper '__repr__' of Person object at 0x0025A6A0>__repr__是Python类中的一个特殊方法,由object 但是由于object提供的这个__repr__方法总是返回一个对象, ( 类名 + obejct at + 内存地址 ),这个值并不能真正实现自我描述的功能。 因此,如果你想在自定义类中实现 “自我描述” 的功能,那么必须重写 __repr__ 方法:class Person(): def __init__(self,name,age): = age def __repr__(self): return '<{0}.{1} object at {2}>'.format(self.
样例: #repr() print(repr(range(5))) print(repr(help)) print(repr(0x200)) print(repr([2,4,5])) 结果输出例如以下
简而言之: __str__ 的目标在于可读性(对用户更友好) __repr__ 的目标在于无歧义(更有助于调试) 举个栗子(Difference between str and repr?) (today) 'datetime.datetime(2020, 3, 28, 11, 6, 49, 580643)' 注:str()和repr()函数分别调用的是 __str__ 和 __repr__ 另外在《流畅的Python》一书中提到如果这两个方法只实现一个的话,那么 __repr__ 会是更好的选择。因为如果一个对象没有 __str__ 函数,解释器会用 __repr__代替,反之则不成立。 参考代码(Difference between str and repr?) : class Sic(object): def __repr__(object): return 'foo' print str(Sic()) print repr(Sic()) class
讲解Unable to get repr for <class 'torch.Tensor'>在使用 PyTorch 进行深度学习开发过程中,有时会遇到以下的错误信息:Unable to get repr 错误原因出现这个错误的原因是 PyTorch 的 torch.Tensor 类没有定义默认的 __repr__ 方法。__repr__ 方法是一个用于返回对象可打印字符串表示的标准方法。 在 MyTensor 中,我们重写了 __repr__ 方法,返回一个以 'MyTensor(' 开头,后接 torch.Tensor 原始 __repr__ 方法的字符串表示,并以 ')' 结尾。 下面举一个示例,展示如何自定义 __repr__ 方法来提供更有意义的对象显示信息。 结论通过自定义 __repr__ 方法,我们可以为 torch.Tensor 类添加一个打印或显示对象时的字符串表示,解决 Unable to get repr for <class 'torch.Tensor
在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即str() 或者 repr() 。 而将一个字符串传给repr() 函数再打印到终端的时候,输出的字符带有引号。 而 print 结合 repr() 实际上是调用对象的__repr__方法输出结果。下例中我们用 str 对象直接调用这两个方法,输出结果的形式与前一个例子保持一致。 >>> print('123'. __repr__()) '123' >>> print('123'. 另外如果想要自定义类的实例能够被 str() 和 repr() 所调用,那么就需要在自定义类中重载__str__和 __repr__方法。
直接输出对象会隐式的调用对象的 __repr__() 方法。我们也可以直接调用 str() 方法和 repr() 方法进行输出。 类中包含 __str__() 和 __repr__() 接下来我们继续添加 __repr__() 方法。 >>> class Dog: ... , 3),__repr__() >>> print(my_dog) Dog(willie, 3),__str__() 在继续添加 __repr__() 方法之后,对对象进行直接输出时,调用 __repr 这表明,当类中只包含 __repr__() 方法时,不管是直接输出还是调用 print() 函数进行输出,都会调用类的 __repr__() 方法。 ,会调用 __str__(),直接输出会调用 __repr__();当类中只包含 __repr__() 时,调用 print() 函数进行对象的输出和直接输出都会调用 __repr__()。
.__ repr__ str函数或者print函数--->obj.str() repr或者交互式解释器--->obj.repr() str函数或者print函数如果__str__没有被定义,那么就会使用 __repr__来代替输出 str函数或者print函数如果__str__被定义,那么__repr__就不会执行 注意:这俩方法的返回值必须是字符串,否则抛出异常
参考链接: Python repr() 前言 python中转换成字符有两种方法:str()和repr(),这两种又有什么区别?什么时候用str?什么时候用repr? (a) '123' >>> type(repr(a)) <class 'str'> >>> print(repr(a)) 123 >>> len(repr(a)) #转换后的数据都是'123',所以长度是 3 3 >>> len(str(a)) #转换后的数据都是'123',所以长度是3 3 将字符串再转换为字符串 >>> repr('abd') #repr转换后是在'abd'的外层又加了一层引号 def __repr__(self): ... return 'repr' ... def __str__(self): ... . >>> a = A() >>> a #直接输出调用的是repr方法 repr >>> print(a) #print调用的是str方法 str repr的使用场景 根据以上代码示例,
各位读者大大们大家好,今天学习str() 与 repr()的对比,并记录学习过程欢迎大家一起交流分享。 ? 新建一个python文件命名为py3_str_vs_repr.py,在这个文件中进行操作代码编写: a = [1,2,3,4] b = 'Hello Moto' print(str(a)) print( repr(a)) #list:发现使用str()和repr() #打印的的结果一样 print(str(b)) print(repr(b)) #String:str()打印结果含有单引号 #repr() 打印结果没有双引号 #上边的代码运行之后好像看不出来 #str()和repr()之间有什么区别 #根据官方解释 #str()目标是可读性的打印 #repr()目标是打印明确的信息 #例如: import Moto' 2019-05-29 21:34:00.010000 datetime.datetime(2019, 5, 29, 21, 34, 0, 10000) 今天初学python的str() 与repr
__call__:实现了__call__的对象是可调用的 __repr__:实现了__repr__的对象可以输出对象的相应属性信息 比如说: class Student: def __init__( self,id,name): self.id=id self.name=name def __repr__(self): return 'id='+str(self.id)+ 判断该对象是否是可调用的: callable(stu) 输出:True 那么,就可以使用如下方式调用该对象: stu() 输出: I can be called my name is 张三 而对于实现了__repr 也就是说__repr__实际上是将对象以字符串的格式进行输出。
前言 Python中__repr__和__str__使用区别 __repr__ 使用 很多时候我们在创建一个类的时候,在终端打印类的实例,看到的是一个类似于这样的内容:<XXX object at 0x0000000001222E10 __repr__是直接输出对象(面向开发者),方便提供接口给开发者使用,如django里面的ORM查询,返回queryset对象。 __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向开发者 关于调用两种方法的时机 使用print()时 使用%s和f’{}’拼接对象时 使用str 特别地,对于下面两种场景: 用%r进行字符串拼接时 用repr(x)转换对象x时 则会调用这个对象的__repr__()方法;若没有,则不再看其是否有__str__()方法,而是显示其内存地址。 当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__,而程序员在开发期间则使用底层的__repr__来显示,实际上__str__只是覆盖了__repr__以得到更友好的用户显示。
在stackoverflow有一个很精辟的回答解释这两个内置方法的区别,简单来说,__str__方法是表现给使用者使用的,而__repr__方法是给程序员用的。 book: def __init__(self): pass def __str__(self): return '__str__' def __repr __(self): return '__repr__' my_book=book() print(my_book) __str__ my_book Out[13]: __repr__ 我们可以简单的看出print方法调用的是__str__,因为这是展现给使用者的,而直接在python的解释器,返回的是__repr__方法。 (2018, 2, 15)' 管中窥豹,str(today)返回的是2018-02-15,我们可以看出来具体的时间,而repr(today)返回的是datetime.date这个方法,显然我们可以直接使用这个方法实例化
前言 在Pyhton 中,如果想定制化打印出实例对象的信息,那可以使用__str__和__repr__魔法方法来定制化显示。 __,如果没有__repr__,则选用默认显示。 •在交互式回应,repr函数中__repr__会被调用,你可以这么认为,__str__ 是给用户看的,__repr__则是给开发者看的. def __repr__(self): ... (dog) 'Animal:name is kitty' 从上面示例可以看出 print 和 str函数中调用的是 __str__, 而在交互式响应中 和 repr函数中调用的是__repr__。