python语法:错误的原子定义?

时间:2018-02-22 10:07:05

标签: python grammar

official documentation检查python语法时,这里是它的内容

atom_expr: ['await'] atom trailer*
atom: ('(' [yield_expr|testlist_comp] ')' |
       '[' [testlist_comp] ']' |
       '{' [dictorsetmaker] '}' |
       NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')
testlist_comp: (test|star_expr) ( comp_for | (',' (test|star_expr))* [','] )
trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME

然后,10.bit_length()是根据该定义的有效语法,但不是根据python解释器。相反,n=10;n.bit_length()是规范和解释器的有效语法。

我应该在哪里找到atomatom_expr真实定义?

1 个答案:

答案 0 :(得分:2)

感谢juanpa的评论和相关问题的答案,问题似乎来自10.。 NUMBER的定义包含点,10.bit_length()属于NUMBER NAME trailer而非NUMBER '.' NAME trailer

为了获得一个atom_expr,必须将点分开:10 .bit_length()(10).bit_length()都给出正确答案。