了解Python中的字符串函数str()和repr()的区别
Python 是一门广泛应用的编程语言,其内置的字符串函数有很多种,其中较为常用的有 str() 和 repr() 函数。两个函数的名称相似,但用途和实现却有所不同。
在Python 中,字符串是一种可变序列,可以用多种方式表示。在字符串中,有些字符是不可以直接用ASCII码来表示的,比如说换行符,制表符,空格等等。若想表达这些字符,需要使用特殊的字符转义符。
str() 函数
str() 是一个内置的字符串函数,主要用来将其他类型的对象转换为字符串类型。它接受一个参数,可以是任意类型的数据对象。
当对象为数字时,str() 函数可以将其转换为字符串类型:
num = 123 str_num = str(num)
在 Python 中,str() 函数不仅可以将数字转换为字符串,还可以将其他数据类型转换成字符串,比如列表、元组、字典等。下面是将列表转换为字符串的示例:
lst = [1, 2, 3] str_lst = str(lst)
此时,str_lst 的值为字符串 '[1, 2, 3]'。
repr()函数
repr() 同样是一个内置的字符串函数,其主要作用是返回一个表示对象的字符串。与 str() 类似,它接受任意类型的对象作为参数,但它不同的是,返回的字符串中包含了对象的表达式(expression)形式:
num = 123 repr_num = repr(num)
在这个例子中,repr_num 的值为字符串 '123'。
比较str()和repr()函数
虽然 str() 和 repr() 都是用来处理字符串类型的数据,但二者有很大的区别。
1. 返回值
在返回值上,str() 函数返回一个用户友好的字符串表示,而 repr() 函数返回一个能被 Python 解释器直接处理的字符串表示。
例如,对于一个属性名称为name,其值为 "Tom",那么在 str() 函数中,它返回的会是"Tom",但在 repr() 函数中,它返回的是 "'Tom'"。注意这里的单引号。
2. 输出格式
再来看一组例子:
s = 'Python' print(str(s)) # 输出字符串 print(repr(s)) # 输出带引号的字符串
str(s) 输出 Python,而repr(s) 输出'Python'。显然,这两者输出格式不同。
3. 对象类型
str() 函数适用于所有的对象,但是 repr() 函数只适用于些对象,例如列表、字符串和字典等等,而对于自定义的对象,可以重载 __repr__() 函数,这样就可以返回自定义的字符串表示。
4. 特殊的字符转义
在字符转义方面,str() 只会转义少数几个特殊字符('、"、\、
、\r、\t等),而repr() 函数会转义所有 ASCII 码字符。
下面的例子中,repr() 把字符串 "it's" 转换成了 "it\'s":
s = "it's" print(str(s)) # it's print(repr(s)) # "it\'s"
5.实现方式
在实现方式上,str() 函数是通过类的 __str__() 方法实现的,而 repr() 函数则是通过类的 __repr__() 方法实现的。
因此,如果在 Python 类中定义了这两个方法,那么在应用 str() 和 repr() 函数时,就可以得到定制化的字符串输出了。
总结
str() 和 repr() 函数都是很有用的字符串处理工具,它们之间的差异点也很小。但在某些特定场合下,选择正确的函数是很重要的。
简单来说,如果你需要将 Python 对象转换成字符串以便于输出和显示,那么可以使用 str() 函数;而如果你需要输出一个 Python 对象的表达式形式,以便于程序员使用和调试,那么应该使用 repr() 函数。
需要注意的一点是,无论是使用 str() 还是 repr() 函数,都要考虑到特殊的字符转义问题,避免字符串输出出现意想不到的问题。
