3

我正在阅读http://learnpythonthehardway.org/book/ex37.html但我不明白该//=符号的作用。 /=我感觉合理:

a = 9
a /= 3
a == 3 # => True

//=

a = 9
a //= 3
a == 3 # => Also True

谢谢。

4

3 回答 3

4

//在 python3 中用作“整数除法”,看看这个答案

在 C 中,/对整数的除法作为“带地板的除法”或“整数除法”。为了提供这种能力,python 提供了//运算符,不像/它会给出浮点结果。

权威参考当然是pep-238

从命令行版本(当你试图弄清楚这样的事情时很有用):

Python 3.2.3 (default, Apr 11 2012, ...
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 10
>>> a/3
3.3333333333333335
>>> a//3
3
>>>
于 2013-02-11T20:19:05.213 回答
3

/如您所知,经典除法//运算符是在 Python 2.2 中添加的,它执行地板除法,并且通过添加此运算符,您可以使用该运算符from __future__ import division使/运算符进行true除法。

a //= 3相当于a = a // 3

所以,这里是总结:

Python Version       operator /       operator //
-------------------------------------------------
2.1x and older        classic           Not Added

2.2 and newer         classic           floor
(without import)      

2.2 and newer          true             floor
(with import)
于 2013-02-11T20:19:34.070 回答
0

//是地板除法:它除法并向下舍入,但如果操作数是浮点数,它仍然会产生一个浮点数。在 Python 2 中,它与整数的常规除法相同,除非您使用它from __future__ import division来获得 Python 3 的“真正”除法行为。

所以,是的,这有点复杂。本质上,它存在通过将两个整数相除来重新创建您在 Python 2 中获得的行为,因为这在 Python 3 中发生了变化。

在 Python 2 中:

  • 11 / 52
  • 11.0 / 5.02.2
  • 11 // 52
  • 11.0 // 5.02.0

在 Python 3带有 的 Python 2from __future__ import division带有的Python 2 中运行:-Q new

  • 11 / 52.2
  • 11.0 / 5.02.2
  • 11 // 52
  • 11.0 // 5.02.0

而且,当然,添加=just 会将其变成一个组合赋值运算符,例如/=.

于 2013-02-11T20:24:58.647 回答