有人能为我解释一下 print sth
和 print str(sth)
之间的区别吗?
例如在sqlite3官方文档中的示例中,可以看到以下代码来创建一个数据库并使用工厂类包装从中提取的数据:
(1) 创建数据库:
# I am using CPython 2.7, but I suppose 2.6 will be Ok as well
import sqlite3
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute('''create table stocks
(date text, trans text, symbol text, qty real, price real)''')
c.execute("""insert into stocks values ('2006-01-05','BUY','RHAT',100,35.14)""")
conn.commit()
c.close()
(2) 现在使用Row
工厂来生成一些对象:
>>> conn.row_factory = sqlite3.Row
>>> c = conn.cursor()
>>> c.execute('select * from stocks')
<sqlite3.Cursor object at 0x7f4e7dd8fa80>
>>> r = c.fetchone()
>>> type(r)
<type 'sqlite3.Row'>
>>> r
(u'2006-01-05', u'BUY', u'RHAT', 100.0, 35.14)
正如你所见,我们可以输入r
或print r
来获取这个行对象的漂亮表示。
但上面未显示的是,print str(r)
会给你不同的东西——更像是:
<sqlite3.Row object at 0x7f4e7dd8abcd>
我想知道熟悉CPython实现的人能否解释一下,print如何从不支持__str__的对象中获取这种表示形式?
或者我猜另一个问题是,在上述表达式给出不同结果的情况下,我如何获得与简单的print obj打印出的字符串等效的字符串?