2012-07-13 6 views

Respuesta

9

Usando float(7) añade algo de sobrecarga innecesaria — Python tiene que encontrar la función float en globals() y llamarlo. El uso de 7.0 hace todas las conversiones necesarias en tiempo de compilación en lugar de tiempo de ejecución. Puede ver esto usando el Python bytecode disassembler.

>>> import dis 
>>> def f(): return 7.0 
... 
>>> def g(): return float(7) 
... 
>>> dis.dis(f) 
    1   0 LOAD_CONST    1 (7.0) 
       3 RETURN_VALUE   
>>> dis.dis(g) 
    1   0 LOAD_GLOBAL    0 (float) 
       3 LOAD_CONST    1 (7) 
       6 CALL_FUNCTION   1 
       9 RETURN_VALUE   
0

7.0 es "mejor", no es necesario que el yeso flote, lo hará automáticamente.

float() se guarda mejor para convertir un elemento no flotante en un elemento flotante.

1

Los literales de Float se pueden escribir como 7.0, eso está bien ya que son automáticamente del tipo float.

Si tiene la intención de convertir un número entero o una cadena para flotar, la función float() es apropiada, pero no es necesario llamar a esa función para escribir un literal flotante.

9

usar el enfoque 7.0, el enfoque float(7) se utiliza para transformar enteros o de cadena tipos de flotadores por lo que es un uso diferente, por ejemplo:

a = 7 
b = "7" 
print float(a) 
7.0 
print float(b) 
7.0 
+0

Ah, veo su uso ahora. ¡Gracias! – piperchester

+1

no hay problema, y ​​bienvenido a SO :) – Hassek

+1

'float()' incurre en algunos gastos generales también. –

0

Usando float(0) es mucho más explícito al volver a leer su código en una fecha posterior, causando menos confusión más adelante si accidentalmente suelta el ".0".

+0

¿Cómo exactamente uno cae accidentalmente? –

+0

@MichaelHoffman Diga que tiene 'this_should_be_a_float = 7.0/denominator', donde el denominador es un int. Mi idea era que para la mantenibilidad futura sería bueno tener una manera muy explícita de señalar que el '7.0' necesitaba ser flotante para no tener un problema de redondeo en caso de que alguien más tarde cambiara la 7.0 a otra constante, como como 6, y se olvidó de agregar el ".0". – CraigTeegarden

+0

Debería usar 'from __future__ import division' si aún no lo está. Entonces esto no será un problema. –

6

Los siguientes son todos equivalentes en Python:

>>> 7. == 7.0 == float(7) == float("7") 
True 

que evitaría el uso de float(7) o float("7") cuando esté duramente codificar el valor, ya que el intérprete de Python primero debe convertir el valor a un número entero o una cadena, y luego convertirlo a punto flotante.

Para evitar esa sobrecarga, use 7. o 7.0 para dar a Python un literal flotante.

Por supuesto, float() todavía se debe utilizar para convertir otros tipos de datos a un flotador.

0

7.0 debe ser más rápido. float(7) crea un número entero, luego llama a la función float() para convertir el número entero en un flotante, por lo que llamar a float(7) implica una sobrecarga de llamada a la función, así como cualquier error que pueda verificar la función float().

Para la mayoría de los propósitos prácticos, la diferencia de velocidad no es muy importante (a menos que se encuentre en un bucle profundo donde su código se llama cientos de millones de veces), pero hay algo poco elegante en invocar un función de conversión cuando el intérprete tiene una sintaxis incorporada para construir flotantes.

Use float() cuando tenga algo que no sea un flotador (como una cadena o un número entero) que desee convertir.