欢迎访问宙启技术站
智能推送

了解Python中的字符串函数str()和repr()的区别

发布时间:2023-06-11 01:17:12

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() 函数,都要考虑到特殊的字符转义问题,避免字符串输出出现意想不到的问题。