【发布时间】:2012-10-05 12:39:00
【问题描述】:
是否有更短的方法来执行以下for-with 组合:
for resource in gen_resources():
with resource:
DoWork1(resource)
.
.
DoWorkN(resource)
如果可能的话,我想避免多余的行+缩进。
资源可以是在离开循环迭代时必须完成的任何东西(打开文件、活动对象等)
【问题讨论】:
-
为什么这很重要?我知道你说过你想避免额外的缩进,但这有什么关系呢?
-
@StevenRumbalski,因为很容易忘记使用
with。我迭代的资源不是经典资源,用户很容易忘记调用他们的close()方法或使用with -
@Albert 在这种情况下,this answer 确实似乎是最好的,当这个设施被集成到
gen_resources()中时。 -
@Albert:这里的东西对我来说并不重要。您不相信您的用户使用
with或调用close(),但您会相信他们将迭代包装在iterate_with中?他们不会同样可能忘记使用生成器功能吗?我并不是说您不信任您的用户是错误的,只是建议的解决方案不能解决问题。
标签: python for-loop with-statement