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
7514 次点击
所在节点    Python
56 条回复
ihciah
2015-12-12 19:13:19 +08:00
0.1+0.2==0.3 是 False ( js 同
dqh3000
2015-12-12 19:13:35 +08:00
这算吗?我好像可以理解

最大的坑不是 2 和 3 的区别吗?
ChiangDi
2015-12-12 19:14:23 +08:00
lambda 只能写在一行里,绝对无法忍受。
icedx
2015-12-12 19:14:26 +08:00
Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [1, 2]
>>> id(a)
38866296
>>> b = a
>>> id(b)
38866296
>>> c = a[:]
>>> id(c)
39037928
>>> d = list(a)
>>> id(d)
37600672
>>> import copy
>>> e = copy.copy(a)
>>> id(e)
39079008
>>>
LINAICAI
2015-12-12 19:20:33 +08:00
实在无法理解,相同或者类似互补功能的函数放不同的模块。。。
Grenadn
2015-12-12 19:21:24 +08:00
Python 2 字符编码相关的坑吧,都体会过的
feikaras
2015-12-12 19:24:04 +08:00
@icedx 感觉不算坑啊,算基础知识。

感觉主要是编码坑和 2 , 3 版本的坑吧。
chevalier
2015-12-12 19:43:46 +08:00
In [1]: a = float('nan')

In [2]: print('a is a: ', a is a)
('a is a: ', True)

In [3]: print('a == a: ', a == a)
('a == a: ', False)

亮瞎了
eclipselu
2015-12-12 19:50:55 +08:00
congeec
2015-12-12 20:09:22 +08:00
楼上说的浮点数相关问题,好多语言都这样,如果不这样实现性能会大打折扣。 list 和 class 的引用可以算俩坑。列表楼上易经说了,类循环引用会造成内存泄漏。看看这个就知道了 https://docs.python.org/3/library/weakref.html 不过其他语言里也有呀。
wph95
2015-12-12 20:10:55 +08:00
python2 的字符串,简直是深坑
怒转 python3
congeec
2015-12-12 20:11:42 +08:00
还有个比较坑的地方是 os.path.join 和 str.join 用法不一样, str.join 接受 iterable 做参数, os.path.join 可以接受可变参数。。。。。用错也没提示,真坑。
fwee
2015-12-12 20:40:43 +08:00
1. python2 弱类型: 2 >"WTF" => False
2. 默认参数不是每次都初始化
3. lambda 只能一行且不能出现 statement
4. py2 多返回值: a, b = 1,2,3 会报错
5. StandardError 经常 catch 不到东西,大多数都得上 Exception
6. 没 switch, 大段 if 真的很丑
7. 推荐 format 方法来格式化,但是 log 中却还是旧的字符串格式化
fwee
2015-12-12 20:41:46 +08:00
8. urljoin 和预期不同,不能接受多个参数,必须一个个嵌套,而且第一个参数如果格式错误也会返回很奇怪的结果
felixzhu
2015-12-12 21:07:07 +08:00
常规开发中主要的坑应该是

1. 字符集
2. 2 和 3 的版本问题
yangtukun1412
2015-12-12 21:07:10 +08:00
>>> def test(a=[]):
... a.append(1)
... return a
...
>>> test()
[1]
>>> test()
[1, 1]
quietin
2015-12-12 21:14:36 +08:00
列表解析里的变量作用域外泄
Changxu
2015-12-12 22:00:08 +08:00
这感觉不算坑啊,只能算语法特性
Pastsong
2015-12-12 22:10:19 +08:00
fy
2015-12-12 22:37:06 +08:00
坑都在 py2 ,郁闷的是 py2/3 的分别本身也是个坑,向下兼容很烦人。

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

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

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

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

© 2021 V2EX