>>> 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ì x
và sau đó gọi repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
thự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 repr
là đư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õ foo
vào trình thông dịch. Nhưng không có foo
biến có sẵn và một ngoại lệ được nêu ra.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str
chỉ là biểu diễn chuỗi của đối tượng (hãy nhớ, x
biế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 5
là '5'
.
>>> str('foo')
'foo'
Và đại diện chuỗi của chuỗi 'foo'
là cùng một chuỗi 'foo'
.