どちらの形式がより効率的で、正しいスタイルであるかなどが気になります。「。0」のアプローチの方がはるかに速いように感じます。「フロート」アプローチが同じように評価される理由はわかりません(そうである場合)。
7 に答える
を使用float(7)
すると、不要なオーバーヘッドが追加されます。Pythonは、でfloat
関数を見つけてglobals()
呼び出す必要があります。を使用7.0
すると、実行時ではなくコンパイル時に必要なすべての変換が実行されます。これは、 Pythonバイトコード逆アセンブラを使用して確認できます。
>>> 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
アプローチを使用します。このアプローチは、float(7)
整数型または文字列型を浮動小数点数に変換するために使用されるため、別の用途になります。たとえば、次のようになります。
a = 7
b = "7"
print float(a)
7.0
print float(b)
7.0
以下はすべてPythonで同等です。
>>> 7. == 7.0 == float(7) == float("7")
True
Pythonインタープリターは最初に値を整数または文字列にキャストしてから、浮動小数点に変換する必要があるため、値を使用しfloat(7)
たり、ハードコーディングしている場合は避けます。float("7")
このオーバーヘッドを回避するには、7.
またはを使用7.0
してPythonにfloatリテラルを指定します。
もちろん、float()
他のデータ型をfloatに変換するためにも使用する必要があります。
フロートリテラルは7.0
、と書くことができます。これは、自動的にタイプになるので問題ありませんfloat
。
整数または文字列をfloatに変換する場合、float()
関数は適切ですが、floatリテラルを書き込むためにその関数を呼び出す必要はありません。
7.0は「優れている」ので、キャストをフロートさせる必要はありません。自動的に実行されます。
float()は、非フロートをフロートにキャストする場合に最適です。
float(0)
後日コードを再読み込みするときに使用する方がはるかに明確であるため、誤って「 .0
」を削除した場合でも混乱が少なくなります。
7.0
より速くする必要があります。 float(7)
整数を作成してから、float()
関数を呼び出して整数をfloatに変換します。そのため、呼び出しは、float(7)
関数呼び出しのオーバーヘッドと、関数のチェックで発生する可能性のあるエラーを意味float()
します。
もちろん、ほとんどの実用的な目的では、速度の違いはそれほど重要ではありません(コードが何億回も呼び出される深いループにいる場合を除きます)が、インタプリタには、floatを作成するための構文が組み込まれています。
float()
変換したいフロートではないもの(文字列や整数など)がある場合に使用します。