Python3内置函数汇总

目录

Python3 repr() 函数详解 返回包含对象的可打印字符串

repr()函数的主要用途是返回传入对象的字符串,对于大部分对象(字符串、数字、布尔值、列表、元组、字典)都是直接返回字符串,并且使用eval()会返回一个与原对象相同值的对象。o == eval(repr(o))这个等式是成立的。

但是遇到一些特殊的对象(比如函数、类等)将返回一个由尖括号括起来的字符串,字符串将包含对象类型的名称。对于特殊的类型,一般情况下eval()是无法获得相同对象的。主要是该对象无法被eval()执行,会报错。

可以在类中使用__repr__()方法来控制此函数为其实例返回的内容。调用设置了__repr__()方法的类时,直接返回__repr__()方法中return的值。

它是Python的内置函数,在python文件中直接可以使用。

repr

语法

repr(o)

参数

o - 对象(包括字符串、数字、布尔值、列表、元组、字典、类等)。

返回值

一般情况下返回表示对象的字符串,并且返回值可以直接使用eval()来还原会原对象。

实例

§ 实例1:一般情况(字符串、数字、布尔值、列表、元组、字典)

代码及运行结果:

>>> repr('abc')                 #字符串
"'abc'"
>>> repr(123)                   #数字
'123'
>>> repr(True)                  #布尔值
'True'
>>> repr(['a','b','c'])         #列表
"['a', 'b', 'c']"
>>> repr(('a','b','c'))         #元组
"('a', 'b', 'c')"
>>> repr({'a':1,'b':2,'c':3})   #字典
"{'a': 1, 'b': 2, 'c': 3}"
§ 实例2:一般情况下的eval还原对象测试

代码及运行结果:

#声明一个列表
>>> l = ['a','b','c']
#使用repr方法获取列表的字符串表示。
>>> o = repr(l)
#获取的字符串表示:"['a', 'b', 'c']"
#验证eval结果是否与原对象相等。
>>> l == eval(o)
True

接下来在特殊情况中举两个比较常见的例子,还有一下特殊情况不常见,在实际使用中要注意一下就可以了。

§ 实例3:特殊情况1 - 类(class)

代码及运行结果:

#首先声明一个普通的类
>>> class main():
...     def run(self):
...         print('abc')
#将类(main)实例化后赋值给变量o
>>> o = main()
>>> repr(o)
#使用repr转化类的实例化对象,将得到一个由尖括号括起来的表示对象标识的字符串
'<__main__.main object at 0x00000000021DF908>'
#验证是否可以使用eval还原对象。
o == eval(repr(o))
#结果会报错,类的标识无法直接使用eval执行。
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1
    <__main__.main object at 0x00000000021DF908>
    ^
SyntaxError: invalid syntax
§ 实例4:特殊情况2 - type方法

代码及运行结果:

#我们使用type函数来做测试。
>>> o = type([1,2])
>>> repr(o)
#输出的结果是一个由尖括号括起来的标识方法执行结果的字符串。
"<class 'list'>"
#验证是否可以使用eval还原对象。
>>> o == eval(repr(o))
#和之前的实例(类)中发生的情况是一样,因为标识是无法被eval()直接执行的。
SyntaxError: invalid syntax
§ 实例5:在类中使用__repr__()方法

调用设置了__repr__()方法的类时,直接返回__repr__()方法中return的值。

虽然__init__()方法也可以在实例化运行指定的运算,但是它不允许使用return,如果想获取到某些初始化值。还得先复制给成员变量,然后外部再调用获取,稍微麻烦了一些。

代码及运行结果:

#声明一个类(class)
>>> class main():
...     def __repr__(self):
...         return 'abc'
...
#直接运行类即返回了__repr__()的返回值,在这个方法里可以做各种运算最终返回结果,也算是一个初始化的返回值咯。
>>> main()
abc

如果有任何建议或意见,欢迎交流沟通

作者:张恺阳

本文链接:https://www.zky.name/article/10.html

来源:张恺阳博客