Representational form in string formating python
我一直在快速学习python,并对对象的表示形式和字符串形式以及repr方法感到困惑。我用以下代码调用x=点(1,3)并得到:
1 2 3 4 5 6 7 8 9 10 11 | class Point(): def __init__(self, x, y): '''Initilizae the object''' self.x = x self.y = y def __repr__(self): return"Point({0.x!r}, {0.y!r})".format(self) def distance_from_origin(self): return math.hypot(self.x, self.y) >>>x Point(1, 3) |
如果!r conversion字段用于表示字符串中的变量,python可以使用eval()语句计算该字符串以创建另一个相同的对象,为什么不起作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | class Point(): def __init__(self, x, y): '''Initilizae the object''' self.x = x self.y = y def __repr__(self): return"{!r}".format(self) def distance_from_origin(self): return math.hypot(self.x, self.y) >>>x File"C:\...\...\examplepoint.py, line 8, in __repr__ return"{!r}".format(self) File"C:\...\...\examplepoint.py, line 8, in __repr__ return"{!r}".format(self) File"C:\...\...\examplepoint.py, line 8, in __repr__ return"{!r}".format(self) File"C:\...\...\examplepoint.py, line 8, in __repr__ return"{!r}".format(self) The same error for 100 more lines RuntimeError: maximum recursion depth exceeded |
我以为呢!R规范将对象X类型的点创建成一个字符串,其表示形式类似于:点(1,3)或类似于第一次运行。python是如何做到这一点的!字符串格式的r,它到底是什么意思?为什么第二个例子不起作用?