应该使用链接调用来支持更明确的分配吗?

时间:2012-07-30 11:19:23

标签: python python-2.7 stringio

我们的团队必须如下所示:

这样:

buf = StringIO.StringIO()
gzip.GzipFile(fileobj=buf, mode='wb').write(foo)
...

和这一个:

buf = StringIO.StringIO()
tmp = gzip.GzipFile(fileobj=buf, mode='wb')
tmp.write(foo)
...

哪一个更像pythonic?

EDITED: 我试过/ catch来做错误处理工作,但哪一个更pythonic?

3 个答案:

答案 0 :(得分:11)

完成后需要关闭GzipFile对象,因此单行不起作用。而是使用上下文管理器表达式:

buf = StringIO.StringIO()
with gzip.GzipFile(fileobj=buf, mode='wb') as tmp:
    tmp.write(foo)

单行gzip.GzipFile(fileobj=buf, mode='wb').write(foo) 非常危险,因为它取决于在表达式末尾被垃圾收集的GzipFile,以便刷新流。如果未能发生这种情况(例如使用Jython),则buf将不包含预期结果。

答案 1 :(得分:3)

要么是好的。选择您认为最具可读性的那个。

就个人而言,我会选择第一个,使用额外变量不会为我添加任何

也就是说,在这种情况下,ecatmur是正确的,您需要在将所有数据写入其后关闭GZipFile实例,因为它会将压缩数据刷新到buf并添加gzip CRC和尺寸信息。没有这个,您的数据可能不完整!

答案 2 :(得分:0)

例如,

Man.eat.work.sleep()

方法链接在ruby / javascript中很常见,我认为它更ruby/javascript style而不是pythonic