【问题标题】:/ and // operator functioning the same// 和 // 运算符功能相同
【发布时间】:2017-08-10 18:40:56
【问题描述】:

我在与这些新运营商打交道时遇到了麻烦。输出显示它们是相等的,但我不明白为什么。在像 C 这样的语言中,这些不会产生相同的结果。

这是我的代码

x = 6
y = 4
t = 3
print " %f e %f" % (x//y, x/y)

输出是这样的:

1.000000 e 1.000000

【问题讨论】:

  • 在 Python 3 中会出现语法错误。
  • 如果你的背景是C语言,那你应该看看教程,不是吗?
  • 这是教程上的,输出不一样
  • @theBotelho 因为大概你的教程是在 Py3 中,而你正在使用 Py2。
  • @TemporalWolf 反之亦然。信不信由你,官方文档中实际上没有提到这一点,至少就我而言couldfind。 (我也检查了 2.7 文档。)根据这个 tutorial// 应该是与地板的分隔符。

标签: python python-3.x operators


【解决方案1】:

这里的故事远不止type of the output。在 Python 2.7 中,您可能期望 / 截断,// 楼层,这有时会导致不同的答案,即使在这两种情况下输出都被强制为 int。事实并非如此。

Python 2 中,两个运算符的输出都是整数,无论​​输入的符号如何,两者的结果都是相同的。

Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.8.2] on linux
 > (6/4, 6//4)
=> (1, 1)
 > (-6/4, -6//4)
=> (-2, -2)
 > (6/-4, 6//-4)   # Shouldn't really be different than the above
=> (-2, -2)        # ... and, isn't.

使用Python 3,您可以看到它们确实执行了不同的操作。具体来说,/ 根本不舍入。

Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
 > (6/4, 6//4)
=> (1.5, 1)
 > (-6/4, -6//4)
=> (-1.5, -2)
 > (6/-4, 6//-4)
=> (-1.5, -2)

正如我在之前对这个问题的评论中提到的那样,这些运算符对于 Python 2 或 Python 3 似乎都没有很好的文档记录,因此任何行为都可以被认为是“正确的”。

【讨论】:

    【解决方案2】:

    在 Python 2 中,两个整数之间的除法得到一个整数,就像在 C 中一样。使用/// 并不重要。

    在 Python 3 中,使用/ 将两个整数相除会产生一个浮点数,但使用// 会产生一个整数。

    根据代码中的 print 语句,您使用的是 Python 2。

    【讨论】:

      猜你喜欢
      • 2019-11-19
      • 1970-01-01
      • 2014-03-21
      • 2021-10-29
      • 2021-02-25
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多