McK*_*yla 3 python floating-point integer division python-3.x
在我的一个任务中,我遇到了一个奇怪的实现,我很好奇它是一个bug还是设计的行为.
在Python 3中,除法/返回浮点数,//表示整数除法,应该返回一个整数.我发现,如果在进行整数除法时其中任何一个值都是浮点数,它将返回一个浮点数.
例:
# These all work as expected
10 / 2
-> 5.0
11 / 2
-> 5.5
10 // 2
-> 5
11 // 2
-> 5
# Here things start to get weird
10.0 // 2
-> 5.0
10 // 2.0
-> 5.0
11.0 // 2
-> 5.0
Run Code Online (Sandbox Code Playgroud)
这应该是这样的吗?如果是这样,为什么它会这样?
jon*_*rpe 11
来自PEP-238,它引入了新的部门(强调我的):
楼层划分的语义
Floor division将在所有Python数值类型中实现,并具有以下语义:
Run Code Online (Sandbox Code Playgroud)a // b == floor(a/b)除了结果类型将是在操作之前强制a和 b进入的公共类型.
具体来说,如果a和b属于同一类型,那么它
a//b也属于那种类型.如果输入具有不同类型,则首先使用与所有其他算术运算符相同的规则将它们强制转换为公共类型.特别是,如果a和b都是int或long,则结果与这些类型的经典除法具有相同的类型和值(包括混合输入类型的情况;
int//long并且long//int都将返回long).对于浮点输入,结果是浮点数.例如:
Run Code Online (Sandbox Code Playgroud)3.5//2.0 == 1.0对于复数,
//会引发异常,因为floor()不允许复数.对于用户定义的类和扩展类型,所有语义都取决于类或类型的实现.
所以是的,它应该表现得那样." //表示整数除法并且应该返回一个整数" - 不完全,它表示地板除法并且应该返回等于整数的东西((a // b).is_integer()在任何操作数都是浮点数的情况下,您总是期望为真).
| 归档时间: |
|
| 查看次数: |
4560 次 |
| 最近记录: |