3 回答
TA貢獻1895條經驗 獲得超3個贊
我將是一個奇怪的聲音(因為所有的答案都在譴責使用這個事實,False == 0并且True == 1,正如語言所保證的那樣)因為我聲稱使用這個事實來簡化你的代碼是完全沒問題的。
從歷史上看,邏輯真/假操作傾向于簡單地0用于虛假和1真實; 在Python 2.2的生命周期過程中,Guido注意到有太多的模塊開始使用諸如此類的分配,false = 0; true = 1并且這產生了樣板和無用的變化(后者因為真假的大寫到處都是 - 有些全部使用了-caps,一些全小寫,一些cap-initial)因此引入了bool子類int及其True和False常量。
由于我們很多人擔心Python新手會使用新類型和常量來限制語言的能力,所以當時有一些阻力,但Guido堅持認為我們只是悲觀:沒有人會理解Python這么糟糕,例如,為了避免完全自然地使用False和True作為列表索引,或總結,或其他這樣完全清楚和有用的習語。
這個線程的答案證明我們是正確的:正如我們所擔心的那樣,對這種類型和常量的角色的完全誤解已經出現,人們正在避免,更糟糕的是,敦促其他人避免,完全自然的Python構造支持無用的回轉。
與這種誤解的趨勢作斗爭,我敦促每個人都使用Python作為Python,而不是試圖強迫它進入其功能和首選風格完全不同的其他語言的模式。 在Python,真假像1和0 99.9%,不同的僅僅在他們str(...)(從而repr(...))形式-為每一個不同的字串其他操作,只需隨意使用,而不必扭曲。這適用于索引,算術,位操作等等。
TA貢獻1841條經驗 獲得超3個贊
我和Alex在一起。False==0而且True==1,這并沒有錯。
不過,在Python 2.5及更高版本中,我會使用Python的條件表達式來編寫這個特定問題的答案:
def bool_to_str(value): return 'Yes' if value else 'No'
這樣就沒有要求參數實際上是一個bool - 就像if x: ...接受任何類型一樣x,bool_to_str()函數應該在傳遞None,字符串,列表或3.14時做正確的事情。
TA貢獻1844條經驗 獲得超8個贊
一定:
def bool_to_str(value): "value should be a bool" return 'Yes' if value else 'No'
更具可讀性。
添加回答
舉報
