【发布时间】:2019-06-18 12:44:07
【问题描述】:
是否有风格指导或理由更喜欢其中一种模式而不是另一种?
最小化上下文管理器下的代码量对我来说“感觉”更干净,但我无法指出具体原因。可能这只是偏好,没有关于此事的官方指导。
1) 里面的所有代码都带有上下文。
with open(file) as f:
text = f.read()
data = text.split(',')
result = my_func(data)
# etc.
2) 里面只有必要的代码和上下文。
with open(file) as f:
text = f.read()
data = text.split(',')
result = my_func(data)
# etc.
【问题讨论】:
-
后者干净、清晰且易于理解。 (至少在我看来)
-
我更喜欢第二个
-
这取决于你所说的官方:“平面比嵌套好。”是zen of python 的一部分
-
我已经投票决定以基于意见的方式结束这个问题,但我选择了 2。就像
try-except块一样,尽量让它们尽可能小和相关。作为奖励,您还可以“保存”一个缩进级别 -
我想 with 块中的长进程可能会锁定资源,例如打开的连接或可能的文件对象,但这是我想知道但未测试的那些之一。一旦我没有理由再呆在里面,我总是试图离开这个街区。
标签: python with-statement pep8 contextmanager