tutorial lenguaje instalar descargar python

lenguaje - ¿Por qué "1.real" es un error de sintaxis pero "1.real" válido en Python?



python wikipedia (3)

Entonces vi estas dos preguntas en Twitter . ¿Cómo es 1.real un error de sintaxis pero 1 .real no?

>>> 1.real File "<stdin>", line 1 1.real ^ SyntaxError: invalid syntax >>> 1 .real 1 >>> 1. real File "<stdin>", line 1 1. real ^ SyntaxError: invalid syntax >>> 1 . real 1 >>> 1..real 1.0 >>> 1 ..real File "<stdin>", line 1 1 ..real ^ SyntaxError: invalid syntax >>> 1.. real 1.0 >>> 1 .. real File "<stdin>", line 1 1 .. real ^ SyntaxError: invalid syntax


1 .real funciona porque es el atributo .real llamado en el entero 1.

1.real no funciona, porque necesitas imperiosamente un espacio al final de un flotador. De lo contrario, es un error de sintaxis.


Con 1.real Python está buscando un literal numérico de punto flotante como 1.0 y no puedes tener una r en un flotador. Con 1 .real Python ha tomado 1 como un entero y está haciendo la búsqueda de atributos en eso.

Es importante tener en cuenta que el manejo de errores de sintaxis de coma flotante ocurre antes que el . búsqueda de atributos.


Supongo que el . se analiza con avidez como parte de un número, si es posible, por lo que es el float 1. , en lugar de ser parte de la llamada al método.

No se permiten espacios alrededor del punto decimal, pero puede tener espacios antes y después del . en una llamada de método. Si el número es seguido por un espacio, el análisis del número se termina, por lo que no es ambiguo.

Veamos los diferentes casos y cómo se analizan:

>>> 1.real # parsed as (1.)real -> missing ''.'' >>> 1 .real # parsed as (1).real -> okay >>> 1. real # parsed as (1.)real -> missing ''.'' >>> 1 . real # parsed as (1).real -> okay >>> 1..real # parsed as (1.).real -> okay >>> 1 ..real # parsed as (1)..real -> one ''.'' too much >>> 1.. real # parsed as (1.).real -> okay >>> 1 .. real # parsed as (1)..real -> one ''.'' too much