【问题标题】:Python Style - Should statements be nested inside a context manager that do not require the context?Python 风格 - 语句是否应该嵌套在不需要上下文的上下文管理器中?
【发布时间】: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


【解决方案1】:

我认为在没有任何“样式指南”语句的情况下,可读性始终是指导方针——您希望在上下文管理器变量(上面的“f”)在范围内时轻松查看它的所有用法。 1 行和 4 行块之间的可见性差异并不显着,但 3 行和 50 行之间的差异可能是显着的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多