诡异的 Python 问题 (调教新手专用)

2019-10-08 13:55:55 +08:00
 zemora

问题 1:

假设 x,y,z 是三个浮点数 (不考虑 inf 或者 NaN),请问下面的函数返回何值?

def test(x, y, z):
    return (x + y) + z == x + (y + z)

问题 2:

假设 n 是一个整数,请问下面的函数返回何值?

def test2(n):
    a = n
    b = n
    return a is b
4116 次点击
所在节点    Python
26 条回复
Kylin30
2019-10-08 20:58:55 +08:00
问题 2 我好像记得大于 255 就是 false,小于 255 就是 true。
iceking
2019-10-08 21:28:24 +08:00
1. 浮点精度问题,不确定
2. 小整数池子保证整数对象垃圾回收性能,不确定
shakespaces
2019-10-08 21:28:37 +08:00
@Kylin30 那是直接赋值,比如 a=1000 b=1000 a is b 返回 False,但是 n=1000 a=n b=n a is b 就返回 True,因为此时 a 和 b 赋值的时候其实指向了同一个对象
yukun666
2019-10-08 21:30:24 +08:00
@Kylin30 好像范围是-5 到 256
fy1993
2019-10-08 21:33:01 +08:00
In [4]: a = 'abc'

In [5]: b = 'abc'

In [6]: a is b
Out[6]: True


楼主看了这个是不是更怀疑了
xlui
2019-10-08 21:47:42 +08:00
为什么一个浮点数精度问题居然能被一而再再而三的发帖,这次居然没有加微信公众号,惊了。

有点无语...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607007

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX