2016-09-16 68 views
0

我在閱讀the python language specification,發現有一個None, TrueFalse令牌。我可以理解NoneFalse之間的差異,因爲None不是一個boolan。但是,關於TrueFalse,爲什麼不是 只是BOOLEAN呢?是否有任何情況下TrueFalse 行爲不同?還是有任何語義上的差異?python語法中的True和False有什麼區別?

請注意,我正在問語法差異,而不是布爾值,其中 明顯不同。

+6

整個21世紀都是基於真與假的區別。 – Kasramvd

+2

我不明白這個問題。 「真」和「假」是不同的標記,所以它們都在語法中。你問爲什麼沒有'布爾:'真'| '假'生產? –

+1

'True'和'False'是Python常量,因此被認爲是'atom'。不知道你還在尋找什麼 –

回答

2

這是一個事實的形式化,TrueFalse是python3中的特殊名稱:你不能分配給它們。

他們不是BOOLEAN的原因很簡單,布爾不是解析器的valid token

注:你會發現這個細節在python2語法,在那裏你可以實際上(如果你想觀看世界燒傷...)分配到的名字真與假失蹤。

+1

然後你可以'刪除它們來恢復意義! – holdenweb

+0

@holdenweb - 然後你可以再次嘗試'刪除它們,但它會告訴你它們沒有被定義,即使你仍然可以使用它們並且看到它們應該是它們。 – ArtOfWarfare

+0

我想看世界燒傷XD –

3
atom: ('(' [yield_expr|testlist_comp] ')' | 
     '[' [testlist_comp] ']' | 
     '{' [dictorsetmaker] '}' | 
     NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False') 

NAMENUMBER,並STRING是表示三類令牌標記。它們中的每一個代表一組可能的令牌。有跡象表明,可以歸類爲NUMBER數量很多文字,許多字符串文字,可以是STRING S等

只有兩個布爾文字,TrueFalse。可以編寫標記器將它們分類爲BOOLEAN。可能有,但沒有。他們只在整個語法中被引用一次,所以編寫'True' | 'False'沒什麼大不了的。

相關問題