大多数pythonic方式表示一个变量,它只通过两个'命名'值切换

时间:2013-01-22 07:14:57

标签: python coding-style readability

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

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

同样笨重。

最好的方法是什么?它更像是一种风格问题而不是任何东西。想得到社区的一些意见

5 个答案:

答案 0 :(得分:6)

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

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

    ....

    far = not far

答案 1 :(得分:4)

如果问题主要是关于样式,那么CleanestSolution(tm)将函数中的翻转逻辑隔离开来:

 side = switch_side(side)

答案 2 :(得分:3)

CLOSE_SIDE = -1
FAR_SIDE = 1

# change sides
side = -side   

答案 3 :(得分:1)

不是它变化很大,而是在两个整数之间切换,有这个常见的习语:

side = CLOSE_SIDE + FAR_SIDE - side

答案 4 :(得分:0)

使用IS_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

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