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

ブール値を使用できることはわかっていますが、それによって、自分が行っていることの読みやすさとわかりやすさが低下したように感じます。2つの州に「名前」を付けてほしい。また、割り当てはコンパクトですが、非常に不格好に感じます。そして、全体のifステートメントを実行します。

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

不格好と同じように感じます。

これに取り組むための最良の方法は何ですか?それは何よりも文体の問題です。コミュニティからの意見をお願いします

4

5 に答える 5

6

2つの値に名前を付ける代わりに、変数に適切な名前を選択して、との間で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

大きく変わるわけではありませんが、2つの整数を切り替えるには、次の一般的なイディオムがあります。

side = CLOSE_SIDE + FAR_SIDE - side
于 2013-01-22T07:17:26.477 に答える
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

重要なのは、適切な変数名を選択することです。

于 2013-01-22T13:39:34.493 に答える