您的位置:

深入探究Python函数repr()

一、repr是什么?

在Python中,repr是一个内置函数,用于返回一个对象的“官方”字符串表示形式。具体而言,它返回一个可以通过eval()或exec()函数进行求值的字符串。因此,它提供了一种简单的、可逆的将Python对象转换为字符串的方式。

例如,对于数字3,其repr表示为字符串'3'。对于列表[1, 2, 3],其repr表示为字符串'[1, 2, 3]'。

二、repr和str的区别是什么?

虽然repr和str都可以将Python对象转换为字符串,但它们的用途有所不同。

str函数返回一个可读性良好的字符串,这个字符串旨在为最终用户提供信息。例如,对于数字3,其str表示为字符串'3',对于列表[1, 2, 3],其str表示为字符串'[1, 2, 3]'。

repr函数则返回一个可以被Python解析器识别的字符串表示形式,这个字符串旨在为开发人员提供信息。例如,对于数字3,其repr表示为字符串'3',对于列表[1, 2, 3],其repr表示为字符串'[1, 2, 3]'。

三、repr如何使用?

repr函数接受一个Python对象作为参数,并返回该对象的字符串表示形式。

num = 3
lst = [1, 2, 3]
print(repr(num))  # 输出'3'
print(repr(lst))  # 输出'[1, 2, 3]' 

它还可以用于在调试时输出中间结果,以便更好地理解程序的执行情况。例如,下面的代码在计算过程中输出了每个步骤的字符串表示形式:

x = 2
y = 3
z = x * y + x ** y
print(repr(x), repr(y), repr(x * y), repr(x ** y), repr(z))  # 输出'2', '3', '6', '8', '14'

四、repr的示例应用

1.将Python对象转换成可执行的字符串

使用repr可以将Python对象转换成一个可以直接在代码中执行的字符串。下面的代码定义了一个名为calculate的函数,接受一个数值列表,计算列表中所有数字的平方和,并返回该和:

def calculate(nums):
    expression = ' + '.join([f'{num} ** 2' for num in nums])
    return eval(expression)
    
nums = [1, 2, 3, 4]
expression_str = repr(nums)
result = eval(f'calculate({expression_str})')
print(result) # 输出30

2.自定义类的repr输出

在自定义类中,可以通过实现__repr__方法来控制对象的repr输出。__repr__方法应返回一个字符串,表示该对象的可执行的字符串表示形式。

例如,下面的代码定义了一个名为Person的类,其中__repr__方法返回该对象的姓名和年龄:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person('{self.name}', {self.age})"
    
person = Person('Tom', 25)
print(repr(person))  # 输出"Person('Tom', 25)" 

3.查看对象的内部结构

在调试时,可以使用repr查看对象的内部结构,以便更好地理解代码的执行情况。例如,下面的代码创建了一个包含两个元素的元组,其中每个元素都是一个嵌套的字典:

person1 = {'name': 'Tom', 'age': 25}
person2 = {'name': 'Kate', 'age': 30}
members = (person1, person2)

print(repr(members))  # 输出"({'name': 'Tom', 'age': 25}, {'name': 'Kate', 'age': 30})" 

四、小结

本文介绍了Python内置函数repr的用法和作用。它提供了一种简单的、可逆的将Python对象转换为字符串的方式,可用于调试、转换成可执行的字符串和查看对象的内部结构等方面。与str函数不同,repr函数返回对象的可执行字符串表示形式,更适合开发人员使用。