1

可能重复:
在 Python 中使用“//”的原因是什么?

在尝试对数字求和进行练习时,我偶然发现了这个解决方案:

def sum_digits(n):
   import math
   total = 0
   for i in range(int(math.log10(n)) + 1):
      total += n % 10
      n //= 10
   return total

我的问题是,倒数第二行是做什么的?正确的语法如何?

4

4 回答 4

3

这实现了所谓的floor division. 楼层除法(由//此处表示)截断小数并返回整数结果,而“正常”除法返回您可能“期望”的答案(带小数)。在 Python 3.x 中,两者之间的区别更大,这意味着这两个运算符返回不同的结果。这是一个使用 Python 3 的示例:

>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3

在 Python 3.x 之前,两者之间没有区别,除非您使用特殊的内置from __future__ import division,然后使除法运算符像在 Python 3.x 中一样执行(这是使用 Python 2.6.5):

In [1]: 10 / 3
Out[1]: 3

In [2]: 10 // 3
Out[2]: 3

In [3]: from __future__ import division

In [4]: 10 / 3
Out[4]: 3.3333333333333335

In [5]: 10 // 3
Out[5]: 3

因此,当您看到类似的内容时n //= 10,它使用与您可能看到的相同的+=// -=/ etc 语法,其中它获取 的当前值并执行等号之前的操作,并将以下变量作为第二个参数,返回结果进入. 例如:*=nn

In [6]: n = 50

In [7]: n += 10

In [8]: n
Out[8]: 60

In [9]: n -= 20

In [10]: n
Out[10]: 40

In [11]: n //= 10

In [12]: n
Out[12]: 4
于 2012-12-03T04:56:24.907 回答
1

倒数第二行是运算符的组合,在某种程度上,包括一个不常见的运算符,这就是它有点令人困惑的原因。

让我们把它分开。

首先,//在 Python 中是floor division,基本上是四舍五入到最接近的整数的除法。因此,

>>> 16//5
3
>>> 2//1
2
>>> 4//3
1
>>> 2//5
0

最后,这=是因为 Python 语法允许对变量执行操作,然后立即将结果重新分配给变量。您可能在 中最常看到它+=,例如:

>>> a = 5
>>> a += 7
>>> a
12

在这种情况下,//=表示“执行楼层除法,将变量除以第二个参数,然后将结果分配给原始输入变量。” 因此:

>>> a = 10
>>> a //= 6
>>> a
1
于 2012-12-03T04:57:34.807 回答
1

//是楼层除法算子。它总是将返回值截断为小于或等于答案的最大整数。

于 2012-12-03T04:53:53.367 回答
0

对于 Python 中的赋值 A += B 等于 A = A + B ,A *= B 等于 A = A * B 同样适用于“Floor Divide”,A //= B 等于 A = A / /乙

Floor Division 表示返回截断的整数

>>> 5 // 3   # 1.6
   1    # 0.6 will be throw off 
于 2012-12-03T05:00:41.390 回答