str() VS repr()
内建函数str()和repr()可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。
str()函数得到的字符串可读性好,而repr()函数得到的字符串通常可以用来重新获得该对象,通常情况下obj == eval(repr(obj)) 这个等式是成立的。这两个函数接受一个对象作为其参数,返回适当的字符串。
>>> str(4.53-2j) '(4.53-2j)' >>> >>> str(1) '1' >>> >>> str(2e10) '20000000000.0' >>> >>> str([0, 5, 9, 9]) '[0, 5, 9, 9]' >>> >>> repr([0, 5, 9, 9]) '[0, 5, 9, 9]' >>> >>> `[0, 5, 9, 9]` '[0, 5, 9, 9]'
尽管str()和repr()运算在特性和功能方面都非常相似,事实上repr返回的是一个对象的“官方”字符串表示,也就是说绝大多数情况下可以通过求 值运算(使用内建函数eval())重新得到该对象,但str()则有所不同。str()致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无 法用于eval()求值,但很适合用于print语句输出。需要再次提醒的是,并不是所有repr()返回的字符串都能够用 eval()内建函数得到原来的对象。
>>> eval(`type(type))`) File "<stdin>", line 1 eval(`type(type))`) ^ SyntaxError:invalid syntax
也就是说 repr() 输出对 Python比较友好,而str()的输出对用户比较友好。虽然如此,很多情况下这三者的输出仍然都是完全一样的。