2016-09-16 31 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'没什么大不了的。

相关问题