Python 是否应该使用链式调用来支持更明确的赋值?

Python 是否应该使用链式调用来支持更明确的赋值?,python,python-2.7,stringio,Python,Python 2.7,Stringio,我们的团队必须进行如下片段: 这: 还有这个: buf = StringIO.StringIO() tmp = gzip.GzipFile(fileobj=buf, mode='wb') tmp.write(foo) ... 哪一个更像蟒蛇 编辑: 我已经尝试/捕获了错误处理工作,但是哪一个更像pythonic?都可以。选择一个你认为最可读的 就我个人而言,我会选择第一个,使用额外的变量对我来说没有任何意义 这就是说,在这种情况下,ecatmur是正确的,您需要在将所有数据写入GZipFile

我们的团队必须进行如下片段:

这:

还有这个:

buf = StringIO.StringIO()
tmp = gzip.GzipFile(fileobj=buf, mode='wb')
tmp.write(foo)
...
哪一个更像蟒蛇

编辑:
我已经尝试/捕获了错误处理工作,但是哪一个更像pythonic?

都可以。选择一个你认为最可读的

就我个人而言,我会选择第一个,使用额外的变量对我来说没有任何意义


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

您需要在完成
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
将不包含预期结果。

例如

Man.eat.work.sleep()

方法链接在ruby/javascript中很常见,我认为它更像是
ruby/javascript风格
not
pythonic

稀疏比密集的小蚱蜢好。我更喜欢使用
with
语句的版本,而不是图片,但我懒得用我的移动设备写答案。尤其是考虑到它的名字非常有意义。同意ecatmur在下面的评论。但是Martijn Pieters是唯一回答这个问题的人:“使用额外变量对我来说没有任何意义。”更重要的是,关闭
GZipFile
实例对于完成压缩和编写基本CRC值至关重要!不,您也可以在Python中的适当位置看到它。以SQLAlchemy为例,在处理SQL数据时,很常见的一种情况是,在那里应用连续的过滤器是有意义的。
Man.eat.work.sleep()