Sono curioso di sapere quale forma è più efficiente, lo stile è corretto, ecc. Mi sembra che l'approccio ".0" sia molto più veloce; Non sono sicuro del perché l'approccio "float" sia ugualmente apprezzato (se lo è).È molto meno intensivo da utilizzare in computazione 7.0 o float (7) in Python?
risposta
Utilizzando float(7)
aggiunge un po 'di inutili spese generali — Python deve trovare la funzione float
in globals()
e chiamarlo. L'utilizzo di 7.0
esegue tutte le conversioni necessarie in fase di compilazione anziché in fase di esecuzione. Puoi vederlo usando lo 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
7.0 è "migliore", non è necessario che il cast galleggi, lo farà automaticamente.
float() si salva meglio per trasmettere un oggetto non mobile a un valore float.
I letterali float possono essere scritti come 7.0
, che è corretto in quanto sono automaticamente di tipo float
.
Se si intende convertire un numero intero o una stringa in virgola mobile, la funzione float()
è appropriata ma non è necessario chiamare tale funzione per scrivere un valore letterale float.
utilizzare l'approccio 7.0
, l'approccio float(7)
viene utilizzato per trasformare i tipi interi o stringhe di carri, quindi è un uso diverso, ad esempio:
a = 7
b = "7"
print float(a)
7.0
print float(b)
7.0
Ah, ora ne vedo l'uso. Grazie! – piperchester
nessun problema, e benvenuti a SO :) – Hassek
'float()' incorre in alcuni overhead pure. –
Utilizzando float(0)
è molto più esplicito quando ri-leggere il vostro codice in un secondo momento, causando meno confusione in seguito se si cade accidentalmente ".0
".
In che modo esattamente uno lo cade accidentalmente? –
@MichaelHoffman Supponiamo di avere 'this_should_be_a_float = 7.0/denominatore', dove denominatore è un int. Pensavo che per la manutenibilità futura sarebbe bello avere un modo molto esplicito per sottolineare che il '7.0' doveva essere un float per non avere un problema di arrotondamento nel caso qualcuno in seguito avesse cambiato il 7.0 in un'altra costante, ad esempio come 6, e ha dimenticato di aggiungere il ".0". – CraigTeegarden
Dovresti usare 'da __future__ import division' se non lo sei già. Quindi questo non sarà un problema. –
Di seguito sono tutti equivalenti in Python:
>>> 7. == 7.0 == float(7) == float("7")
True
Vorrei evitare di utilizzare float(7)
o float("7")
quando si è hard-codifica il valore, come l'interprete Python deve prima il cast del valore di un intero o una stringa, quindi convertirla in virgola mobile.
Per evitare questo sovraccarico, utilizzare 7.
o 7.0
per fornire a Python un valore letterale float.
Ovviamente, float()
deve essere ancora utilizzato per convertire altri tipi di dati in un float.
7.0
dovrebbe essere più veloce. float(7)
crea un numero intero, quindi chiama la funzione float()
per convertire il numero intero in virgola mobile, pertanto chiamare float(7)
implica l'overhead delle chiamate di funzione e qualsiasi errore durante il controllo della funzione float()
.
Per gli scopi pratici, ovviamente, la differenza di velocità è improbabile che importi molto (a meno che non si sia in un ciclo profondo in cui il codice viene chiamato centinaia di milioni di volte), ma c'è qualcosa di inelegante nel richiamare un funzione di conversione quando l'interprete ha una sintassi incorporata per la costruzione di float.
Utilizzare float()
quando si dispone di qualcosa che non è un oggetto mobile (come una stringa o un numero intero) che si desidera convertire.
- 1. Se utilizzare CMS o meno
- 2. Indice python dettato da un oggetto o due float
- 3. Metodo meno intensivo della cpu per verificare se una lista è cambiata in C#
- 4. pow o ** per un numero molto grande in Python
- 5. VirtualWebappLoader - è una buona opzione da utilizzare in produzione?
- 6. Verificare se un numero float contiene o meno decimali
- 7. Segmentare l'array Python in regioni univoche connesse da una singola cella o meno?
- 8. CAGradientLayer orizzontale in iOS 7.0
- 9. Ricerca di una libreria half float o quarter float
- 10. Python - Controlla se un file è vuoto o meno
- 11. Gestione di numeri molto piccoli in python
- 12. Conversione di char * in float o double
- 13. Multi-GPU Computazione Cuda
- 14. Python float - str - float weirdness
- 15. Confronta `float` e` float64` in python
- 16. Qual è il punto di float ('Inf') in Python?
- 17. Debug in OpenERP 7.0
- 18. Come utilizzare HTML5 in IE 7?
- 19. Timedelta moltiplicare con float in python
- 20. Recupero datetime da float e viceversa in python
- 21. zlib in Xcode 7.0
- 22. Utilizzare meno lato del server preprocessore css o lato client
- 23. Java: dovrei usare float o float?
- 24. come trovare Sidekiq è in esecuzione o meno
- 25. Quando i QLC sono molto meno efficienti?
- 26. Controlla se l'url è valido o meno
- 27. Qual è la differenza tra Float e float in java?
- 28. L'affettatura è molto più lenta in Python 3.4?
- 29. Due risultati molto diversi ma molto coerenti da Python timeit
- 30. Impossibile convertire la matrice in float python
Accetta la risposta qui sotto se ritieni che sia utile. –