Python 2中"//"和"/"之间的区别

12

Python 2有两个除法运算符:///。以下是输出:

========================================= RESTART: Shell =========================================
>>> for x in range(10):
        for y in range(1, 10):
                print x,'//',y,'=',x//y
                print x,'/',y,'=',x/y
                print


0 // 1 = 0
0 / 1 = 0

0 // 2 = 0
0 / 2 = 0

0 // 3 = 0
0 / 3 = 0

0 // 4 = 0
0 / 4 = 0

0 // 5 = 0
0 / 5 = 0

0 // 6 = 0
0 / 6 = 0

0 // 7 = 0
0 / 7 = 0

0 // 8 = 0
0 / 8 = 0

0 // 9 = 0
0 / 9 = 0

1 // 1 = 1
1 / 1 = 1

1 // 2 = 0
1 / 2 = 0

1 // 3 = 0
1 / 3 = 0

1 // 4 = 0
1 / 4 = 0

1 // 5 = 0
1 / 5 = 0

1 // 6 = 0
1 / 6 = 0

1 // 7 = 0
1 / 7 = 0

1 // 8 = 0
1 / 8 = 0

1 // 9 = 0
1 / 9 = 0

2 // 1 = 2
2 / 1 = 2

2 // 2 = 1
2 / 2 = 1

2 // 3 = 0
2 / 3 = 0

2 // 4 = 0
2 / 4 = 0

2 // 5 = 0
2 / 5 = 0

2 // 6 = 0
2 / 6 = 0

2 // 7 = 0
2 / 7 = 0

2 // 8 = 0
2 / 8 = 0

2 // 9 = 0
2 / 9 = 0

3 // 1 = 3
3 / 1 = 3

3 // 2 = 1
3 / 2 = 1

3 // 3 = 1
3 / 3 = 1

3 // 4 = 0
3 / 4 = 0

3 // 5 = 0
3 / 5 = 0

3 // 6 = 0
3 / 6 = 0

3 // 7 = 0
3 / 7 = 0

3 // 8 = 0
3 / 8 = 0

3 // 9 = 0
3 / 9 = 0

4 // 1 = 4
4 / 1 = 4

4 // 2 = 2
4 / 2 = 2

4 // 3 = 1
4 / 3 = 1

4 // 4 = 1
4 / 4 = 1

4 // 5 = 0
4 / 5 = 0

4 // 6 = 0
4 / 6 = 0

4 // 7 = 0
4 / 7 = 0

4 // 8 = 0
4 / 8 = 0

4 // 9 = 0
4 / 9 = 0

5 // 1 = 5
5 / 1 = 5

5 // 2 = 2
5 / 2 = 2

5 // 3 = 1
5 / 3 = 1

5 // 4 = 1
5 / 4 = 1

5 // 5 = 1
5 / 5 = 1

5 // 6 = 0
5 / 6 = 0

5 // 7 = 0
5 / 7 = 0

5 // 8 = 0
5 / 8 = 0

5 // 9 = 0
5 / 9 = 0

6 // 1 = 6
6 / 1 = 6

6 // 2 = 3
6 / 2 = 3

6 // 3 = 2
6 / 3 = 2

6 // 4 = 1
6 / 4 = 1

6 // 5 = 1
6 / 5 = 1

6 // 6 = 1
6 / 6 = 1

6 // 7 = 0
6 / 7 = 0

6 // 8 = 0
6 / 8 = 0

6 // 9 = 0
6 / 9 = 0

7 // 1 = 7
7 / 1 = 7

7 // 2 = 3
7 / 2 = 3

7 // 3 = 2
7 / 3 = 2

7 // 4 = 1
7 / 4 = 1

7 // 5 = 1
7 / 5 = 1

7 // 6 = 1
7 / 6 = 1

7 // 7 = 1
7 / 7 = 1

7 // 8 = 0
7 / 8 = 0

7 // 9 = 0
7 / 9 = 0

8 // 1 = 8
8 / 1 = 8

8 // 2 = 4
8 / 2 = 4

8 // 3 = 2
8 / 3 = 2

8 // 4 = 2
8 / 4 = 2

8 // 5 = 1
8 / 5 = 1

8 // 6 = 1
8 / 6 = 1

8 // 7 = 1
8 / 7 = 1

8 // 8 = 1
8 / 8 = 1

8 // 9 = 0
8 / 9 = 0

9 // 1 = 9
9 / 1 = 9

9 // 2 = 4
9 / 2 = 4

9 // 3 = 3
9 / 3 = 3

9 // 4 = 2
9 / 4 = 2

9 // 5 = 1
9 / 5 = 1

9 // 6 = 1
9 / 6 = 1

9 // 7 = 1
9 / 7 = 1

9 // 8 = 1
9 / 8 = 1

9 // 9 = 1
9 / 9 = 1

>>> 

几乎总是证明a/b等于a//b。有没有任何情况它们不相等?如果没有,为什么Python 2会包含两个执行相同操作的运算符?


1
当应用于Python 2.x中的整数时,///完全相同。在Python 3.x中尝试相同的测试,并准备好惊喜。拥有两个运算符是为未来做准备的一种方式。 - Mark Ransom
from __future__ import division - Peter Wood
新的//除法运算符是由PEP 238 - 更改除法运算符引入的。要默认使用“未来”(Python 3)样式的除法,请在程序中使用__future__导入,正如Peter Wood上面所评论的那样。 - Kevin J. Chase
哎呀,抱歉。在我提出问题时,我并没有在“类似的”列表中看到这个。 - user4913676
2个回答

33

// 是 Python 中的向下取整除法运算符。其区别在于当除以浮点数时更为明显。

在 Python2 中,两个整数相除会使用整数除法,这最终会得到与向下取整除法相同的结果。但是,您仍然可以使用 // 来获得浮点除法的向下取整结果。live example

# Python 2
>>> 10.0 / 3
3.3333333333333335
>>> 10.0 // 3
3.0

然而,在Python3中,两个整数相除的结果是浮点数,但使用//则会进行整数除法。现场示例

# Python3
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3

如果您目前仍在使用Python2,但希望某天转换到Python3,则在两个整数相除时应始终使用//,或者使用from __future__ import division 在Python2中获取Python3的行为。

地板除法表示向负无穷大舍入。对于正值,这与截断相同,但对于负值则不是。 3.3向下舍入为3,但-3.3向下舍入为-4。

# Python3
>>> -10//3
-4
>>> 10//3
3

谢谢。现在我明白了。 - user4913676
1
在 Python 2 中,您可以使用 from __future__ import division 来获得 Python 3 版本的 / 行为。 - kindall

2
在Python 2.7中,要进行真正的除法运算,你需要从名为“future”的模块中导入division:
from __future__ import division

接下来,/将成为真正的(浮点)除法,即:

15 / 4 => 3.75

// 将是整数除法(实际除法的整数部分),即:

15 // 4 => 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接