>>> x = 'foo'
>>> x
'foo'
因此,名称x附加到’foo’字符串。当你调用例如repr(x)时,iterpreter放置’foo’而不是x,然后调用repr(‘foo’)。
>>> repr(x)
"'foo'"
>>> x.__repr__()
"'foo'"
repr实际上调用了x的魔术方法__repr__,它提供了包含赋值给x的值’foo’的表示形式的字符串。所以它返回’foo’里面的字符串“”导致“’foo’”。 repr的想法是给一个字符串,其中包含一系列符号,我们可以在解释器中键入并获得相同的值作为参数发送到repr。
>>> eval("'foo'")
'foo'
当我们调用eval(“’foo’”)时,它与在解释器中键入“foo”相同。这是因为我们直接在解释器中键入外字符串“”的内容。
>>> eval('foo')
Traceback (most recent call last):
File "", line 1, in
eval('foo')
File "", line 1, in
NameError: name 'foo' is not defined
如果我们调用eval(‘foo’),它就像我们在解释器中键入foo一样。但是没有foo变量引发异常。
>>> str(x)
'foo'
>>> x.__str__()
'foo'
>>>
str只是对象的字符串表示形式(记住,x变量是指“foo”),因此此函数返回字符串。
>>> str(5)
'5'
整数5的字符串表示形式为“5”。
>>> str('foo')
'foo'
字符串’foo’的字符串表示形式是相同的字符串’foo’。