Python中双除运算符相对于单除运算符的优点
Python中的双除法运算符在除法后返回整数和浮点参数的下限值。
# A Python program to demonstrate use of
# "//" for both integers and floating points
print(5//2)
print(-5//2)
print(5.0//2)
输出:
2
-3
2.0
对于非常大的数字,单除法运算符通常表现异常。考虑以下示例。
示例 1:
# single division
print(1000000002/2)
# Gives wrong output
print(int(((10 ** 17) + 2)/2))
# Gives Correct output
print(((10 ** 17) + 2)//2)
输出:
500000001.0
50000000000000000
50000000000000001
示例 2:
x = 10000000000000000000006
if int(x / 2) == x // 2:
print("Hello")
else:
print("World")
输出:
World
如果单除法运算符表现正常,则输出应该是 Hello,因为 2 正确除法了 x。但是输出是 World 因为 Single Division Operator 和 Double Division Operator 之后的结果不一样。
这个事实可以用于程序,例如查找大 n 的前 n 个数字的总和。
n = 10000000000
s1 = int(n * (n + 1) / 2)
s2 = n * (n + 1) // 2
print("Sum using single division operator : ", s1)
print("Sum using double division operator : ", s2)
输出:
Sum using single division operator : 50000000005000003584
Sum using double division operator : 50000000005000000000
因此用单除法运算符得到的结果是错误的,而用双除法运算符得出的结果是正确的。这是Python中 Double Division Operator 相对于 Single Division Operator 的巨大优势。