>>> x = 'foo'
>>> x
'foo'
Vì vậy, tên xđược gắn vào 'foo'chuỗi. Khi bạn gọi ví dụ repr(x), thông dịch viên đặt 'foo'thay vì xvà sau đó gọi repr('foo').
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
reprthực sự gọi một phương thức ma thuật __repr__của x, cung cấp cho chuỗi chứa biểu diễn của giá trị 'foo'được gán x. Vì vậy, nó trở lại 'foo'bên trong chuỗi ""kết quả "'foo'". Ý tưởng reprlà đưa ra một chuỗi chứa một loạt các ký hiệu mà chúng ta có thể nhập vào trình thông dịch và nhận cùng một giá trị được gửi làm đối số repr.
>>> eval("'foo'")
'foo'
Khi chúng tôi gọi eval("'foo'"), nó giống như chúng tôi gõ 'foo'vào trình thông dịch. Đó là khi chúng ta trực tiếp nhập nội dung của chuỗi bên ngoài ""trong trình thông dịch.
>>> eval('foo')
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eval('foo')
File "<string>", line 1, in <module>
NameError: name 'foo' is not defined
Nếu chúng ta gọi eval('foo'), nó giống như chúng ta gõ foovào trình thông dịch. Nhưng không có foobiến có sẵn và một ngoại lệ được nêu ra.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
strchỉ là biểu diễn chuỗi của đối tượng (hãy nhớ, xbiến tham chiếu 'foo'), vì vậy hàm này trả về chuỗi.
>>> str(5)
'5'
Chuỗi đại diện của số nguyên 5là '5'.
>>> str('foo')
'foo'
Và đại diện chuỗi của chuỗi 'foo'là cùng một chuỗi 'foo'.