1

我有一个非常复杂的迭代,每次循环时,我都需要一个影响循环中完成的工作的“参数”。基本上,我一直在做以下事情:

CLOSE_SIDE = 0
FAR_SIDE = 1

....

while (...):
    if (side == CLOSE_SIDE):
        ....
    else if (side == FAR_SIDE):
        ....

    ....

    side = FAR_SIDE if (side == CLOSE_SIDE) else CLOSE_SIDE

我意识到我可以只使用布尔值,但我觉得这降低了我正在做的事情的可读性和明显性。我希望这两个州被“命名”。此外,尽管任务紧凑,但感觉非常笨重。并做一个完整的 if 语句:

if side == CLOSE_SIDE:
    side = FAR_SIDE
else if side == FAR_SIDE:
    side = CLOSE_SIDE

感觉同样笨重。

解决这个问题的最佳方法是什么?这更像是一个风格问题。想听听社区的一些意见

4

5 回答 5

6

您可以为变量选择适当的名称并在 和 之间切换,而不是命名这两个bool值:TrueFalse

while (...):
    if far:
        ....
    else:
        ....

    ....

    far = not far
于 2013-01-22T07:19:47.410 回答
4

如果问题主要与样式有关,则 CleanestSolution(tm) 将翻转逻辑隔离在一个函数中:

 side = switch_side(side)
于 2013-01-22T07:19:57.770 回答
3
CLOSE_SIDE = -1
FAR_SIDE = 1

# change sides
side = -side   
于 2013-01-22T07:19:25.553 回答
1

不是说它变化太大,而是在两个整数之间切换,有这样一个常见的习惯用法:

side = CLOSE_SIDE + FAR_SIDE - side
于 2013-01-22T07:17:26.477 回答
0

在布尔名称前面加上IS_or ON_,使其含义变得明显:

ON_FAR_SIDE = True

while (...):
    if ON_FAR_SIDE:
        ....
    else:
        # Must be on near side
        ....

    # Switch sides
    ON_FAR_SIDE = not ON_FAR_SIDE

重要的部分是选择一个好的变量名。

于 2013-01-22T13:39:34.493 回答