I can call methods for numbers only when I bind them to a name:
>>> a = 5
>>> a.bit_length()
3
I can call string literal methods:
>>> 'Hello World'.lower()
'hello world'
But I cannot call methods for numeric literals:
>>> 5.bit_length()
There is a SyntaxError. Is there a practical reason for this or historical?
Edit Just found this related question that shows workarounds (which have already been suggested here as well). I think this also answers the main question - with simple workarounds, there were probably not enough advantages to make the grammar more complex (and harder to parse) to make this work.