为什么这个函数在" //"适用于整数?
>>> minimum = int((a + b) - math.fabs(a-b))//2
>>> print(type(minimum))
答案 0 :(得分:6)
//
并不意味着将返回整数,运算符//
被调用(floor division),但可能返回float或int它取决于操作数类型,例如:9//2
等于4
和9.0//2.0
等于4.0
。那是浮动的。
5.6. Binary arithmetic operations¶
/
(除法)和//
(地板除法)运算符产生其参数的商。数字参数首先转换为通用类型。普通或长整数除法产生相同类型的整数; “结果是数学划分的结果,'floor'功能应用于结果”。除以零会引发ZeroDivisionError异常。
检查ideone's link of working example是否有Python3._:
以下示例可能有助于了解/
和//
之间的区别以及为什么//
有用(阅读评论):
a = 9.0
b = 2.0
print a//b # floor division gives `4.0` instead of `4.5`
a = 9
b = 2
print a/b # int division because both `b` and `a` are `int` => `4.5`
print a//b # float division returns `4`
a = 9.0
b = 2
print a/b # float division gives `4.5` because `a` is a float
print a//b # floor division fives `4.0`
输出:
4.0 # you doubt
4.5
4
4.5 # usefulness of //
4.0
现在在你的表达式中,两个操作数都是int
,所以answer是int type:
int((a + b) - math.fabs(a-b)) // 2
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^
# int due to casting int => `minimum` as int
因此,如果任何操作数是浮点数,那么//
会导致浮点数,但幅度等于floor。