【发布时间】:2015-02-14 08:13:54
【问题描述】:
为什么 stream.write 几乎可以输出除零以外的任何东西?
from StringIO import StringIO
v0 = 0
v1 = 1
a = [1, 0, v1, v0, "string", 0.0, 2.0]
stream = StringIO()
for v in a:
stream.write(v)
stream.write('\n')
print stream.getvalue()
使用 Python 2.7.6,运行此代码会产生:
1
1
string
2.0
【问题讨论】:
-
原来
.write(0)在StringIO的上下文中表示don't write。我的猜测是,在其内部实现中,它可能首先检查输入,例如if 0:,它始终等于False。您是否有任何理由没有首先使用str()将项目转换为string? -
顺便说一句,我更喜欢使用
cStringIO而不是StringIO。它的速度更快。 -
有趣的是,当
v不是字符串时,Python 3io模块(它替换了 StringIO 模块)会在stream.write(v)上产生 TypeError。 -
如 Python 2.7 中的
cStringIO.StringIO。 -
@ozgur 实际上我确实最终用 str() 包装了数字,但很好奇为什么这应该是必要的。