una lingua di solito è composta da tre livelli.
quando si fornisce un programma a una lingua prima deve "leggere" il programma. poi costruisce ciò che ha letto in qualcosa con cui può funzionare. e infine esegue quella cosa come "un programma" e (si spera) stampa un risultato.
il problema qui è che la prima parte di python - la parte che legge i programmi - è confusa. è confuso perché non è abbastanza intelligente da sapere la differenza tra
1.234
e
1.letters
quello che sembra accadere è che si pensa si stava tentando di digitare un numero come 1.234
ma commesso un errore e lettere digitate invece (!).
quindi questo non ha nulla a che fare con ciò che 1
"è veramente" e se è o meno un oggetto. tutto quel tipo di logica avviene nel secondo e nel terzo stadio che ho descritto in precedenza, quando python tenta di compilare e quindi eseguire il programma.
quello che hai scoperto è solo una strana (ma interessante!) Ruga in come Python legge i programmi.
[lo definirei un errore, ma probabilmente lo è per una ragione. si scopre che alcune cose sono difficili da leggere per i computer. python è probabilmente progettato in modo che sia facile (veloce) per il computer leggere i programmi. risolvere questo "bug" probabilmente renderebbe la parte di python che legge i programmi più lentamente o più complicati. quindi è probabilmente un trade-off.]
fonte
2012-08-03 20:00:54
è un errore di sintassi. il compilatore non capisce la sintassi. la sintassi del linguaggio (la sua grammatica) non è definita in modo che tu possa digitare un nome di metodo dopo un intero. questo non è un errore quando il programma è in esecuzione - è da * prima * che il programma viene eseguito. il parser non riesce a capire cosa hai digitato. –
@andrewcooke - Penso che la domanda (splendidamente dimostrata a proposito) sia * perché * il parser non può gestirlo? È possibile accedere ad attributi/metodi su letterali di altri tipi (si consideri il comune '" ".join (...)', perché non gli interi? – mgilson
lo fa, ma ho pensato che la preoccupazione principale della persona che faceva la domanda era che in qualche modo questo significava che gli interi non erano oggetti (vedi http://stackoverflow.com/questions/11801549/python-data-types-are-classes-or-data-strutture dallo stesso utente), quindi la mia enfasi su come questo è da un livello separato, precedente –