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
7334 次点击
所在节点    Python
56 条回复
Yinz
2015-12-13 14:55:02 +08:00
@CRVV 说了反直觉看不懂?
wizardoz
2015-12-13 16:14:50 +08:00
@wph95 转了 3 以后发现很多习惯库都不支持 3 ,甚至连替代品都没有,这个坑比 2 的字符坑还要大
CRVV
2015-12-13 16:41:11 +08:00
@Yinz
随意找一个学过数学的人来判断,如果 '/' 除法运算符, 3 / 2 = 1.5 是非常正常的事情
3 / 2 = 1 才是反直觉
这里显然是为了和直觉一致,在 Python 3 里改了
CRVV
2015-12-13 16:47:31 +08:00
@RTNelo
这种事情有一个限度
比如我绝不会用“请搞清楚自己写的每一行代码的意思”来说你在最上面写的关于 id 事情

你们都能想到用“转成 Decimal 实例”这么奇怪的方法来调用 Python 的整数运算了,明显是没看过 Python3 和 Python2 的差别
而这个除法运算符的差别是 https://docs.python.org/3/howto/pyporting.html 里面讲的第一个 2 和 3 的差别
丝毫不看文档,又要 from __future__ import xxx ,出错了还怪语言
那我觉得吐槽你们不懂自己写的代码并没有错
judasnow
2015-12-13 17:10:57 +08:00
x = 1,
# x = (1,)
Yinz
2015-12-13 17:19:54 +08:00
@CRVV 你好,我想你并没有看懂我一开始表达的意思。 Python2 在引入 future 的 division 后,即使是对超长整数进行除法运算,也会使运算结果被转换为使用科学计数法储存的 float 类型,导致精度丢失。其中,精度丢失是我认为的反直觉之处。

对于你回复 @RTNelo 说我们不看文档怪语言这句话,我认为我们之间存在较大理解分歧,我不准备展开辩论。
RTNelo
2015-12-13 17:21:33 +08:00
@CRVV
PEP238 第二段
```
We propose to fix this by introducing different operators for
different operations: x/y to return a reasonable approximation of
the mathematical result of the division ("true division"), x//y to
return the floor ("floor division").
```
”/“相对于”//“这个"floor division"被称为"true division",但是这里因为精度损失导致"/"不再是"true division"了。我用 Decimal 来实现更精确的"true division"很奇怪?用"//"来实现"true division"的你连 floor division 和 true division 都分不清还来指责我”明显没看过 Python3 和 Python2 的差别“?

另外,不要觉得除了你就没人看语言文档了。
RTNelo
2015-12-13 17:25:42 +08:00
@CRVV 对于一个学过数学的人来说,你不觉得 4 * n / 2 ( n 为整数)的结果不是个偶数是个很反直觉的事吗?
fine
2015-12-13 20:13:30 +08:00
函数默认参数
Z1076
2015-12-14 03:50:34 +08:00
python3.4 旧版本有一个 bug 用 apache 部署 django 会导致找不到 mod_wsgi 模块………… 旧的版本和 3.4.4 都没有问题┻━┻︵╰(‵□′)╯︵┻━┻
jezal
2015-12-14 09:28:56 +08:00
编码、时区,我遇到的两个坑。
esile
2015-12-14 17:06:08 +08:00
编码
编码
编码
要说 3 遍
bingoqiu
2015-12-14 17:10:50 +08:00
a = b, c = [1, 2]
mulog
2015-12-15 12:31:05 +08:00
我觉得真的坑的也就是编码 和 py2/py3 的兼容性
哦对了还有 list comprehension 的「作用域泄漏」,虽然我没遇过, 当时看到它真是 wtf.. 不过 python3 已经修复了。
mingyun
2015-12-15 21:27:07 +08:00
>>> a=1
>>> id(a)
31056200L
>>>b=1
>>> id(b)
31056200L
>>> id(c)
35743896L
>>> d=257
>>> id(d)
35743872L
shutongxinq
2015-12-16 20:10:49 +08:00
@CRVV 任何一个 python3 的 tutorial 里面都会着重讲两个 division 的区别吧...这真不是 python 的问题。

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

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

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

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

© 2021 V2EX