>>> x = 'foo'
>>> x
'foo'
Więc nazwa x
jest dołączona do 'foo'
sznurka. Na przykład, repr(x)
gdy dzwonisz, tłumacz stawia 'foo'
zamiast, x
a następnie dzwoni repr('foo')
.
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr
w rzeczywistości wywołuje magiczną metodę __repr__
of x
, która daje ciąg zawierający reprezentację 'foo'
przypisanej wartości x
. Więc zwraca 'foo'
wewnątrz ciągu, w ""
wyniku czego "'foo'"
. Chodzi o repr
to, aby podać łańcuch zawierający serię symboli, które możemy wpisać do interpretera i uzyskać tę samą wartość, która została przesłana jako argument repr
.
>>> eval("'foo'")
'foo'
Kiedy dzwonimy eval("'foo'")
, jest to to samo, co wpisujemy 'foo'
w tłumacza. Dzieje się tak, ponieważ bezpośrednio wpisujemy zawartość zewnętrznego ciągu ""
w interpreteru.
>>> 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
Jeśli zadzwonimy eval('foo')
, to tak samo, jak wpisujemy foo
tłumacza. Ale nie ma foo
dostępnej zmiennej i zgłaszany jest wyjątek.
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str
jest po prostu ciągową reprezentacją obiektu (pamiętaj, x
zmienna się odwołuje 'foo'
), więc ta funkcja zwraca łańcuch.
>>> str(5)
'5'
Reprezentacja liczby całkowitej w postaci łańcucha 5
to '5'
.
>>> str('foo')
'foo'
A reprezentacja łańcucha 'foo'
to ten sam ciąg 'foo'
.