【发布时间】:2015-03-05 12:54:25
【问题描述】:
这里有一些代码,我正在努力使其更具可读性。它可以工作,但是嵌套的 for 循环和 try/if 使乍一看有点难以理解发生了什么。
有人可以就如何加入嵌套的 for 循环或压缩此代码给我一些建议吗?
matcher = None
if re.match(_RE_OBJECT, nodes.replace(LQMN, '')):
matcher = alias
else:
for x in lister[0].conditions:
for y in x.codes:
try:
if y.id.split(',')[1] == condition:
matcher = x.codenames
except IndexError:
pass
【问题讨论】:
-
如果您将 for 循环压缩在一行中,我认为您不会使您的代码“更具可读性”。您是否希望获得更短的代码或更易读的代码? (坦率地说,这段代码并不是那么难以阅读或过度嵌套......)
-
理想情况下尝试获得更具可读性的代码。
-
您的
for循环和try:... except块很好。但是你可以在你的_RE_OBJECT上使用re.compile()。 (如果您缩进 4 个空格而不是 2 个空格,那么您的代码看起来会更令人愉悦。恕我直言)。如果你的目标是可读性,那么试着想出比x和y更有意义的名字。简短的、一次性的名称在单循环中是可以的,但在深度嵌套的代码中它们开始变得有点迟钝。 -
然后放置嵌套的 for 循环不会对您的事业有多大帮助。我认为这很容易阅读,即使我不知道
lister是什么,我也知道发生了什么。此外,我要做的唯一改变是更深的缩进。 (但这也可能是在 SO 上而不是在实际代码中格式化,afaik python 缩进是 4 个空格)。 -
@ljetibo:Python 不在乎你的缩进单元有多大,只要你的缩进与你的缩进匹配。您可以使用单个空格缩进 - 我经常在交互式解释器中使用,但它在脚本中看起来真的很难看,因为它很难跟踪正在发生的事情。