2012-07-13 6 views

Odpowiedz

9

Korzystanie float(7) dodaje jakiś niepotrzebny narzut — Python musi znaleźć funkcję float w globals() i nazwać. Użycie 7.0 wykonuje wszystkie niezbędne konwersje podczas kompilacji, a nie podczas wykonywania. Możesz to zobaczyć, używając 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 jest "lepszy", nie ma potrzeby, aby obsada się unosiła, zrobi to automatycznie.

Funkcja float() jest najlepiej zapisana w celu rzucania obiektu non-float w tryb float.

1

Litery Float można zapisać jako 7.0, co jest w porządku, ponieważ są one automatycznie typu float.

Jeśli zamierzasz przekonwertować liczbę całkowitą lub łańcuchową na wartość zmiennoprzecinkową, wówczas funkcja float() jest odpowiednia, ale funkcja ta nie musi być wywoływana, aby zapisać literał zmiennoprzecinkowy.

9

stosowanie metody 7.0 podejście float(7) służy do przekształcenia typu Integer lub sznurek do pływaków więc to inna zastosowanie, na przykład:

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

Ah Widzę teraz jego użycie. Dziękuję Ci! – piperchester

+1

nie ma problemu, i zapraszam do SO :) – Hassek

+1

'float()' powoduje również pewne obciążenie. –

0

Korzystanie float(0) jest o wiele bardziej wyraźne podczas ponownego czytania kodu w późniejszym terminie, powodując później mniejsze zamieszanie, jeśli przypadkowo upuścisz ".0".

+0

Jak dokładnie przypadkowo to upuszczasz? –

+0

@MichaelHoffman Powiedz, że masz 'this_should_be_a_float = 7.0/denominator', gdzie mianownik jest int. Myślałem, że dla przyszłej łatwości obsługi może być miło mieć bardzo wyraźny sposób, aby wskazać, że '7.0' musi być zmienną, aby nie mieć problemu z zaokrąglaniem w przypadku, gdyby ktoś później zmienił 7.0 do innej stałej, na przykład jako 6, i zapomniałem dodać ".0". – CraigTeegarden

+0

Powinieneś użyć 'from __future__ import division', jeśli jeszcze nie jesteś. To nie będzie problem. –

6

Poniżej są równoważne w Pythonie:

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

Chciałbym unikać float(7) lub float("7") gdy jesteś ciężko kodowania wartości, jak interpreter Pythona musi najpierw rzucić wartość do liczby całkowitej lub ciąg znaków, a następnie przekonwertuj go na zmiennoprzecinkowe.

Aby uniknąć tego narzutu, użyj 7. lub 7.0, aby nadać Pythonowi literał float.

Oczywiście float() powinien być nadal stosowany do konwersji innych typów danych do pływaka.

0

7.0 powinna być szybsza. float(7) tworzy liczbę całkowitą, a następnie wywołać funkcję float() przekonwertować liczbę całkowitą do pływaka, więc nazywając float(7) implikuje wywołanie funkcji napowietrznych, jak również wszelkie sprawdzanie błędów funkcji float() może zrobić.

Oczywiście dla większości praktycznych zastosowań różnica w prędkości jest mało prawdopodobna (chyba że jesteś w głębokiej pętli, w której twój kod nazywa się setki milionów razy), ale jest coś nieeleganckiego w wywołaniu funkcja konwersji, gdy interpreter ma wbudowaną składnię do konstruowania elementów pływających.

Użyj float(), gdy masz coś, co nie jest zmiennoprzecinkowe (jak ciąg lub liczba całkowita), które chcesz przekonwertować.

Powiązane problemy