2010-08-11 130 views
2

我知道有條件地聲明變量是不好的約定/設計。即:有條件地設置和有條件地使用變量python

if some_boolean: 
    x = 1 

其中x未在其他地方聲明。但是如果只在滿足條件時才使用它,那麼是否有條件地聲明變量是不好的?

if some_boolean and some_other_boolean: 
    x+=1 
+2

我不認爲這是'壞'的。我認爲這可能是一個跡象,表明你應該將課程或功能分解爲更小的組件,但有時候,這是不可行的。你有沒有特別的情況? – aaronasterling 2010-08-11 00:37:32

+0

這只是我的腳本允許用戶指定選項。這取決於選項,我的腳本在腳本的開頭和結尾都做了不同的事情。 – 2010-08-11 00:39:51

+0

我絕對同意它指向代碼中的錯誤模塊化。您是否熟悉[SRP](http://en.wikipedia.org/wiki/Single_responsibility_principle)?發佈代碼樣本可能會幫助我們指出如何重構代碼。 – Daenyth 2010-08-11 02:26:26

回答

2

這是可疑的風格,因爲它很容易基於對未來維護者的不完美,公正的理解而出現錯誤。我也認爲最初將變量設置爲None(除非已知更多有用的值)有助於提高可讀性,部分原因是它爲您提供了一個自然的地方來記錄所有帶有註釋的變量(而不是遍佈所有這些註釋這個地方,這使他們很難找到;-)。

1

,如果你的代碼看起來象

if some_boolean: 
    x = 1 
# some actions 
# not changing some_boolean 
# but calculating some_other_boolean 
# ... 
if some_boolean and some_other_boolean: 
    x+=1 

是否可以重構爲

def some_actions(some_args,...): 
#... 
def calculate_some_other_boolean(some_other_args,...): 
#... 
if some_boolean: 
    x = 1 
    some_actions(some_args,...) 
    if calculate_some_other_boolean(some_other_args,...): 
     x+=1 
else: 
    some_actions(some_args,...) 

0

從一個非常簡單的設計角度來看,我只是默認布爾值爲false,即使它可能稍後不會使用。那樣的話,布爾值不是也許是定義的,或者也許是實際上是一個布爾值,並且如果它使用,它具有適當的值。

如果您有兩個或三個布爾值設置爲false,並且它們永遠不會被使用,但它不會在大局意義上產生任何顯着差異。但是,如果你有不止一個,它可能表明設計問題。