2012-07-13 7 views
9

どのフォームがより効率的か、正しいスタイルかなどが不思議です。私は ".0"アプローチがはるかに速いと感じています。私はなぜ "フロート"のアプローチが(もしそうなら)平等に評価されているのか分かりません。Pythonで7.0またはfloat(7)を使用するのに計算量が少なくて済みますか?

+2

有用と判断された場合は、以下の回答を受け入れてください。 –

答えて

9

はPythonがglobals()float機能を見つけて、それを呼び出すために持っているいくつかの不要なオーバーヘッド—を追加します。 7.0を使用すると、実行時ではなくコンパイル時にすべての必要な変換が実行されます。これは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は「良い」です。キャストを浮かせる必要はなく、自動的に行います。

float()は、浮動小数点から浮動小数点へのキャストで最もよく保存されます。

1

浮動小数点数は7.0と書くことができます。浮動小数点数は自動的にタイプfloatであるため、大丈夫です。

整数または文字列を浮動小数点数に変換する場合は、float()関数が適切ですが、浮動小数点定数を書くために関数を呼び出す必要はありません。

9

float(7)アプローチは、それは別の使用ですので、例えば、フロートに整数や文字列の型を変換するために使用され、7.0アプローチを使用します。

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

ああ、私は今、その使用が見えます。ありがとうございました! – piperchester

+1

問題はありません。そして、ようこそSO: – Hassek

+1

'float()'はいくらかのオーバーヘッドも発生させます。 –

0

float(0)を使用すると、はるかに明確なときに再読み込みあなたのコードです後で誤って「.0」を落としてしまった場合、混乱が少なくなります。 float(7)を使用して

+0

誤ってそれを正確にどのように削除しますか? –

+0

@MichaelHoffmanあなたは 'this_should_be_a_float = 7.0/denominator'を持っているとしましょう。ここで、分母はintです。私の考えは、将来のメンテナンス性のために、誰かが後で7.0を別の定数に変更した場合に丸めの問題を起こさないために、 '7.0'を浮動小数点にする必要があることを指摘するための非常に明白な方法6とし、 ".0"を追加するのを忘れてしまった。 – CraigTeegarden

+0

'__future__ import division'をまだ使用していない場合は、それを使用してください。そして、これは問題ではありません。 –

6

次はPythonですべて等価です。

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

私はあなたが値をハードコーディングされたときにPythonインタプリタが最初の整数に値をキャストしなければならないとして、float(7)またはfloat("7")を使用して避けるだろうまたは文字列に変換し、浮動小数点に変換します。

オーバーヘッドを避けるには、7.または7.0を使用して、Pythonに浮動小数点定数を与えます。

もちろん、float()は、他のデータ型をfloatに変換するために使用する必要があります。

0

7.0はもっと速くなければなりません。 float(7)は整数を作成し、次にfloat()関数を呼び出して整数をfloatに変換します。したがって、float(7)を呼び出すと、関数呼び出しのオーバーヘッドと、float()関数のエラーチェックが行われます。

ほとんどの実用的な目的のために、速度の違いはあまり問題になることはありません(コードが何百万回も呼ばれている深いループにいない限り)。しかし、インタプリタに浮動小数点を構築する構文が組み込まれている場合は、変換関数を使用します。

変換する浮動小数点数(文字列または整数など)がない場合は、float()を使用してください。

関連する問題