2012-10-11 257 views
0

在if語句中分配變量並在if語句的該部分被調用時不使用每個變量是不好的做法嗎?if語句中的變量

例如在下面的代碼中,我有兩個代碼選項。選項1如果觸發器=='1'或觸發器=='2',則變量y將不被使用,因爲只有在觸發器=='4'或觸發器=='5'時才需要。選項2較長,但解決了這個問題。

# option 1 

if trigger == '1' or trigger == '4': 
    x = int(start) 
    y = int(s1) 
elif trigger == '2'or trigger == '5': 
    x = int(s1) 
    y = int(s2) 
elif trigger == '3': 
    x = int(s2) 

# option 2 

if trigger == '1' or trigger == '4': 
    x = int(start) 
elif trigger == '2'or trigger == '5': 
    x = int(s1) 
elif trigger == '3': 
    x = int(s2) 

if trigger == '4': 
    y = int(s1) 
elif trigger == '5': 
    y = int(s2) 

我的問題是哪一個是正確的,應該使用哪一個?

謝謝。

更新 -

因此,它是確定以設置一個變量,如果不使用它的IF函數(在這種情況下)被稱爲這一角色呢?這是不錯的做法或導致內存問題等。 謝謝。

+3

對我來說很好。如果在('1','4')中觸發:',我會這樣做,但是,它更加pythonic。 –

+0

@JoelCornett:'如果'14''中的觸發器做同樣的事情並且需要更少的擊鍵 – inspectorG4dget

+3

@ inspectorG4dget - 但是在觸發==「14」'的情況下失敗。 – detly

回答

0

如果所有s1,s2等將始終存在並且是有效整數,那麼選項1是好的。

但是,它確實使您的代碼不必要地依賴於您不使用的值的格式。有時候這很好。但是如果例如s1和朋友來自在命令行上傳遞的選項或者輸入到輸入文件中的選項,您的用戶不會喜歡您拋出ValueError以使這些值未定義,從而迫使它們在他們無用的參數中傳遞無意義的整數。

所以真的,答案是這一切都取決於上下文!這些問題很難給出一個普遍的答案。

+0

謝謝你的回答已經清除了使用它的理由。 –

1

爲什麼不在你的if裏有更多的條件。

這是一個更好的方式來寫你的option 2。我認爲,你可以遵循: -

if trigger in ('1', '4'): // You can better use `in` to check for more values 
    x = int(start) 

    if trigger == '4': 
     y = int(s1) 

elif trigger in ('2', '5'): 
    x = int(s1) 

    if trigger == '5': 
     y = int(s2)    

elif trigger == '3': 
    x = int(s2) 
2

如果你真的想僅在使用時讓他們定義的,爲什麼不把它完全明確,明顯的都讀取和改變?

if trigger == '1': 
    x = int(start) 

elif trigger == '2': 
    x = int(s1) 

elif trigger == '3': 
    x = int(s2) 

elif trigger == '4': 
    x = int(start) 
    y = int(s1) 

elif trigger == '5': 
    x = int(s1) 
    y = int(s2) 
+0

嗯,我不一定需要它們才能被定義,如果使用。ATM我想減少我現有的代碼,現在想知道是否有任何副作用,或者如果編程實踐不好,定義一個變量而不是每次調用函數時都使用它們。我已經更新了原文,以反映這一點。 –

1

類似於在KV diagram的優化,其中X ED字段被認爲是或不是取決於它是否在優化是有用的(與BCD值,其中所述值10..15未定義比照7段顯示器) ,我會傾向於儘可能保持簡單,並且即使它們稍後不被使用也會分配值。

+0

@ glglgl所以即使它們以後不被使用,也沒有賦值的issus? –

+0

不,他們只是沒有使用。 – glglgl