谁能告诉我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__
?
或者我猜另一个问题是——在上述表达式给出不同结果的情况下——我如何获得一个与将用 simple 打印的字符串等效的字符串print obj
?