我们的团队必须如下所示:
这样:
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?
答案 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
。