Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0
これは意図したものですか? int/int=int
を返す以前のバージョンを強く覚えていますか?どうすればよいですか、新しい除算演算子がありますか、それとも常にキャストする必要がありますか?
PEP-238 をご覧ください:除算演算子の変更
//演算子を使用すると、フロア分割を明確に要求できます。
すぐに2//2
が見つかりました。
それがすぐに誰かを助けるかもしれないことを願っています。
Python 2.7の場合:デフォルトでは、除算演算子は整数出力を返します。
結果をダブルで取得するにはmultiple 1. to "dividend or divisor"
100/35 => 2 #(Expected is 2.857142857142857)
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857
Python 3で
// => used for integer output
/ => used for double output
100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0 # floating-point result if divsor or dividend real
受け入れられた答えはすでに PEP 238 に言及しています。 PEP全体を読むことなく、何が起こっているのかに興味がある人のために、舞台裏を簡単に見たいだけです。
Pythonは、+
、-
、*
、/
などの演算子を特別な関数にマップします。 a + b
は次と同等です
a.__add__(b)
Python 2の除算については、デフォルトでは/
のみが__div__
にマッピングされ、結果は入力タイプに依存します(例:int
、float
)。
Python 2.2は__future__
機能division
を導入し、除算のセマンティクスを次のように変更しました(TL; DR of PEP 238):
/
は__truediv__
にマップされ、「除算の数学的な結果の合理的な近似値を返す」必要があります(PEP 238からの引用)//
は__floordiv__
にマッピングされ、/
のフロアされた結果を返すはずですPython 3.0では、PEP 238の変更がデフォルトの動作になり、Pythonのオブジェクトモデルには特別なメソッド__div__
はありません。
Python 2とPython 3で同じコードを使用する場合は、
from __future__ import division
/
と//
のPEP 238セマンティクスに固執します。