& Ldquo; sys.getsizeof (INT) & Rdquo; возвращает неоправданно большое значение?

>>> x = 'foo'
>>> x
'foo'

Итак, имя x прикреплено к строке 'foo'. Когда вы вызываете, например, repr(x), интерпретатор помещает 'foo' вместо x, а затем вызывает repr('foo').

>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"

repr фактически вызывает магический метод __repr__ в x ], который дает строку, содержащую представление значения 'foo', присвоенное x. Поэтому он возвращает 'foo' внутри строки "", что приводит к "'foo'". Идея repr состоит в том, чтобы дать строку, содержащую ряд символов, которые мы можем ввести в интерпретаторе, и получить то же значение, которое было отправлено как аргумент repr.

>>> eval("'foo'")
'foo'

Когда мы вызываем eval("'foo'"), это то же самое, что мы набираем 'foo' в интерпретаторе. Это как мы непосредственно набираем содержимое внешней строки "" в интерпретаторе.

>>> 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

Если мы назовем eval('foo'), это то же самое, что мы набираем foo в интерпретаторе. Но нет переменной foo и возникает исключение.

>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>> 

str - это просто строковое представление объекта (помните, что переменная x относится к 'foo'), так что эта функция возвращает строку.

>>> str(5)
'5'

Строковое представление integer 5 - '5'.

>>> str('foo')
'foo'

И строковое представление строки 'foo' - это одна и та же строка 'foo'.

30
задан Hailiang Zhang 28 April 2012 в 17:31
поделиться