Python 都有哪些语言坑?

2015-12-12 18:57:52 +08:00
 RTNelo

先说个我知道的:

'''Python 2.7.6'''

In [1]: class Test(object):
   ...:     def test(self):
   ...:         pass
   ...:     

In [2]: a = Test()

In [3]: b = Test()

In [4]: a.test is b.test
Out[4]: False

In [5]: id(a.test) == id(b.test)
Out[5]: True
7485 次点击
所在节点    Python
56 条回复
ksc010
2015-12-12 22:38:38 +08:00
is 和 == 本身就不是一个意思
is 比较的是是否是同一个"对象"
==比较的是否是相同的“值”
oaix
2015-12-12 23:16:40 +08:00
是问 python2 还是 python3 ?
Hyperion
2015-12-12 23:26:54 +08:00
小数是 IEEE754 的锅, JavaScript/Python 表示不背。
des
2015-12-13 00:00:49 +08:00
@chevalier NaN 本来就不等于任何东西,包括他自己,你是头一回知道吗?
semut
2015-12-13 00:03:09 +08:00
@chevalier nan 是指 not a number ,所以不能说两个不是数的东西一定会相等啊
icedx
2015-12-13 00:22:02 +08:00
@feikaras 是 features
xuboying
2015-12-13 00:24:54 +08:00
lambda 一行+1
Yinz
2015-12-13 00:39:21 +08:00
In [1]: a = 123456789012345678901234567890123456789012345678901234567890

In [2]: a /= 2

In [3]: a
Out[3]: 61728394506172839450617283945061728394506172839450617283945L

In [4]: a % 2 == 0
Out[4]: False

In [5]: from __future__ import division

In [6]: a = 123456789012345678901234567890123456789012345678901234567890

In [7]: a /= 2

In [8]: a
Out[8]: 6.172839450617284e+58

In [9]: a % 2 == 0
Out[9]: True

版本 Python 2.7.10

导入 future 的 division 后的灵异事件,之前遇到的
RTNelo
2015-12-13 00:53:28 +08:00
@Yinz true division 先把操作数转换成 float 再运用除法...所以这种情况是因为 float 损失精度出现的?
RTNelo
2015-12-13 01:07:26 +08:00
另外好多字符编码问题是“ decode 参数是用 GB2312 、 GBK 还是 GB18030 ?”的问题...
Yinz
2015-12-13 01:08:01 +08:00
@RTNelo 是的的确就是导入 division 后自动转 float 的精度损失问题,解决方法也是有的,强制高精度计算就行了。不过这个主要是反直觉的坑,当时我逐步调试找了有一会的。
ipconfiger
2015-12-13 01:08:07 +08:00
慢!~~~~~~~~~~~~~~~~~
RTNelo
2015-12-13 01:09:39 +08:00
@ksc010 我举的那个例子重点根本不是运算符。
RTNelo
2015-12-13 01:13:29 +08:00
@Yinz 强制高精度计算?是用 Decimal 吗?
Yinz
2015-12-13 01:14:56 +08:00
@RTNelo 对,其中一个数转成 Decimal 实例就行了,计算完再转回标准类型
congeec
2015-12-13 08:38:28 +08:00
这个应该是你想要的答案: Python 的 16 个“坑”
http://saebbs.com/forum.php?mod=viewthread&tid=38016&page=1&extra=
CRVV
2015-12-13 12:39:09 +08:00
@Yinz @RTNelo
from __future__ import division
这一行是引入 Python3 的除法运算符
'/' 是浮点数除法
'//' 是整数除法

请搞清楚自己写的每一行代码的意思
RTNelo
2015-12-13 13:03:15 +08:00
@CRVV 那还真是抱歉,所有对语言坑的吐槽都可以用一句“请搞清楚自己写的每一行代码的意思”顶回去。
edsgerlin
2015-12-13 13:04:34 +08:00
@ChiangDi lambda 要是能写多行,我就想把 Python 当成函数式语言用了……真可惜。
dawncold
2015-12-13 14:45:46 +08:00
generator 只能遍历一次

groupby 要先自己排好序?

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

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

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

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

© 2021 V2EX