一、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函数返回对象的可执行字符串表示形式,更适合开发人员使用。