Python integer division yields float

前端 未结 5 1456
离开以前
离开以前 2020-11-22 03:01
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.
>         


        
5条回答
  •  臣服心动
    2020-11-22 03:46

    The accepted answer already mentions PEP 238. I just want to add a quick look behind the scenes for those interested in what's going on without reading the whole PEP.

    Python maps operators like +, -, * and / to special functions, such that e.g. a + b is equivalent to

    a.__add__(b)
    

    Regarding division in Python 2, there is by default only / which maps to __div__ and the result is dependent on the input types (e.g. int, float).

    Python 2.2 introduced the __future__ feature division, which changed the division semantics the following way (TL;DR of PEP 238):

    • / maps to __truediv__ which must "return a reasonable approximation of the mathematical result of the division" (quote from PEP 238)
    • // maps to __floordiv__, which should return the floored result of /

    With Python 3.0, the changes of PEP 238 became the default behaviour and there is no more special method __div__ in Python's object model.

    If you want to use the same code in Python 2 and Python 3 use

    from __future__ import division
    

    and stick to the PEP 238 semantics of / and //.

提交回复
热议问题