Recientemente me encontré con una sintaxis que nunca antes había visto cuando aprendí python ni en la mayoría de los tutoriales, la notación .. , se parece a esto:
f = 1..__truediv__ # or 1..__div__ for python 2 print(f(8)) # prints 0.125Pensé que era exactamente lo mismo que (excepto que es más largo, por supuesto):
f = lambda x: (1).__truediv__(x) print(f(8)) # prints 0.125 or 1//8Pero mis preguntas son:
Esto probablemente me ahorrará muchas líneas de código en el futuro... :)
Lo que tiene es un literal float sin el cero final, al que luego accede al método __truediv__ . No es un operador en sí mismo; el primer punto es parte del valor flotante y el segundo es el operador de punto para acceder a las propiedades y métodos de los objetos.
Puede llegar al mismo punto haciendo lo siguiente.
>>> f = 1. >>> f 1.0 >>> f.__floordiv__ <method-wrapper '__floordiv__' of float object at 0x7f9fb4dc1a20>Otro ejemplo
>>> 1..__add__(2.) 3.0Aquí sumamos 1,0 a 2,0, lo que obviamente da como resultado 3,0.
Dos puntos juntos pueden ser un poco incómodos al principio:
f = 1..__truediv__ # or 1..__div__ for python 2Pero es lo mismo que escribir:
f = 1.0.__truediv__ # or 1.0.__div__ for python 2 Porque los literales float se pueden escribir de tres formas:
normal_float = 1.0 short_float = 1. # == 1.0 prefixed_float = .1 # == 0.1