先来看几个列子
>>> a = "777"
>>> repr(a)
"'777'"
>>> eval(repr(a)) # 还是原来的类型
'777'
>>> eval(str(a)) # 不是原来的类型
777
>>> type(eval(str(a)))
<type 'int'>
>>> class A(object):
... def a():
... a = 1
>>> b = A()
>>> repr(b)
'<__main__.A object at 0x10a12d150>'
>>>
>>> str(b)
'<__main__.A object at 0x10a12d150>'
>>> repr(b) == str(b) # 两个函数转成字符串的值是相等的
True
>>> eval(repr(b)) # 报错了
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
<__main__.A object at 0x10a12d150>
^
SyntaxError: invalid syntax
>>> eval('A()')
<__main__.A object at 0x10a0d2b10>
总结:
repr:将对象转化成字符串;python的基本数据类型做为参数时,可以和eval函数来回转化;非基本类型就不能来回转化了。
str: 将对象转化成字符串;即使参数的类型是基本类型,也不一定能够来回转化;非基本类型也不能来回转化。
eval:将字符串转化成对象