significado reservadas palabras operator float entera decimales claves python division

reservadas - python division entera



¿Cuál es la razón para tener ''//'' en Python? (5)

En Python 3, hicieron que el operador / haga una división de punto flotante, y agregaron el operador // para hacer una división de enteros (es decir, cociente sin resto); mientras que en Python 2, el operador / era simplemente una división entera, a menos que uno de los operandos ya fuera un número de punto flotante.

En Python 2.X:

>>> 10/3 3 >>> # to get a floating point number from integer division: >>> 10.0/3 3.3333333333333335 >>> float(10)/3 3.3333333333333335

En Python 3:

>>> 10/3 3.3333333333333335 >>> 10//3 3

Para mayor referencia, ver PEP238 .

Esta pregunta ya tiene una respuesta aquí:

Vi esto en el código de alguien:

y = img_index // num_images

donde img_index es un índice en ejecución y num_images es 3.

Cuando me meto con // en IPython, parece que actúa como un signo de división (es decir, una barra diagonal). Me preguntaba si hay alguna razón para tener barras diagonales dobles hacia delante.


Para complementar estas otras respuestas, el operador // también ofrece beneficios de rendimiento significativos (3x) sobre / , suponiendo que desea una división de enteros.

$ python -m timeit ''20.5 // 2'' 100000000 loops, best of 3: 0.0149 usec per loop $ python -m timeit ''20.5 / 2'' 10000000 loops, best of 3: 0.0484 usec per loop $ python -m timeit ''20 / 2'' 10000000 loops, best of 3: 0.043 usec per loop $ python -m timeit ''20 // 2'' 100000000 loops, best of 3: 0.0144 usec per loop


Para complementar la respuesta de Alex, agregaría que a partir de Python 2.2.0a2, from __future__ import division es una alternativa conveniente al uso de muchos float(…)/… Todas las divisiones realizan divisiones flotantes , excepto aquellas con // . Esto funciona con todas las versiones desde 2.2.0a2 en adelante.


// es incondicionalmente "división de pisos", por ejemplo:

>>> 4.0//1.5 2.0

Como puede ver, a pesar de que ambos operandos son float , // pisos fijos, siempre se sabe con seguridad lo que va a hacer.

Soltero / puede o no, piso dependiendo de la versión de Python, futuras importaciones e incluso banderas en las que se ejecuta Python, por ejemplo ...

$ python2.6 -Qold -c ''print 2/3'' 0 $ python2.6 -Qnew -c ''print 2/3'' 0.666666666667

Como puede ver, single / may floor, o puede devolver un flotante, basado en problemas completamente no locales, hasta e incluyendo el valor de la bandera -Q ... ;-).

Por lo tanto, si sabe cuándo quiere un piso, utilice siempre // , que lo garantiza. Si sabe que no quiere pisos, golpee un float() alrededor de otro operando y use / . Cualquier otra combinación, y estás a merced de la versión, las importaciones y las banderas! -)


// puede considerarse un alias para math.floor () para divisiones con valor de retorno de tipo float . Funciona como no-op operativo para divisiones con valor de retorno de tipo int .

import math # let''s examine `float` returns # ------------------------------------- # divide >>> 1.0 / 2 0.5 # divide and round down >>> math.floor(1.0/2) 0.0 # divide and round down >>> 1.0 // 2 0.0 # now let''s examine `integer` returns # ------------------------------------- >>> 1/2 0 >>> 1//2 0