在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()
是规范和解释器的有效语法。
我应该在哪里找到atom
和atom_expr
的真实定义?
答案 0 :(得分:2)
感谢juanpa的评论和相关问题的答案,问题似乎来自10.
。 NUMBER的定义包含点,10.bit_length()
属于NUMBER NAME trailer
而非NUMBER '.' NAME trailer
。
为了获得一个atom_expr,必须将点分开:10 .bit_length()
和(10).bit_length()
都给出正确答案。