在Python中,repr()和eval()函数是一对互补的函数,用于将对象的内部表示形式转换为字符串和将字符串转换回对象的原始形式。
repr()函数接受一个对象作为参数,并返回一个字符串,该字符串是对象调用__repr__()方法的结果。__repr__()方法定义了对象的“官方”字符串表示形式,它应该足够详细以便于理解对象的状态。repr()函数通常用于调试和日志记录,它返回的字符串可以用于重建对象。
下面是一个使用repr()函数的示例:
class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person(name='{self.name}', age={self.age})" person = Person("John", 30) print(repr(person))
输出结果为:
Person(name='John', age=30)
eval()函数接受一个字符串作为参数,并将其解析为一个表达式,并返回表达式的结果。如果字符串包含一个Python表达式,eval()函数会计算表达式并返回计算结果。eval()函数可以用于动态地执行代码。
下面是一个使用eval()函数的示例:
expression = "2 + 3 * 4" result = eval(expression) print(result)
输出结果为:
14
在这个示例中,eval()函数将字符串"2 + 3 * 4"解析为一个表达式,并计算表达式的结果。
repr()函数和eval()函数可以互相配合使用。repr()函数可以将一个对象转换为字符串表示形式,然后eval()函数可以将该字符串解析为一个新的对象。
下面是一个使用repr()和eval()函数的示例:
class Point: def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return f"Point({self.x}, {self.y})" point = Point(1, 2) repr_str = repr(point) new_point = eval(repr_str) print(new_point)
输出结果为:
Point(1, 2)
在这个示例中,repr()函数将Point对象转换为字符串表示形式"Point(1, 2)",然后eval()函数将该字符串解析为一个新的Point对象。
需要注意的是,eval()函数执行的是字符串中的Python代码,因此它具有一定的安全风险。如果字符串来自不可信的来源,尤其是用户输入,应谨慎使用eval()函数,以避免潜在的安全问题。