为什么 python3 不能友好地兼容 python2?

2017-06-28 23:36:41 +08:00
 rensung
高高兴兴地装了 python3;
高高兴兴地找到了一个 python 模块;
很不高兴地发现这个 python 模块只能用于 python2;
很不高兴地装了 python2。
11629 次点击
所在节点    Python
85 条回复
visonme
2017-06-29 15:23:10 +08:00
因为 py3 的设计者门,一开始就是把 py3 作为一个新的东西打造,而不是单纯作为 PY2 的升级版
fy
2017-06-29 15:28:11 +08:00
简单,移除不支持 python3 的库。

因为它们多半是三年以上不更新的过时库,换社区里更好的替代品。
gouchaoer
2017-06-29 15:37:22 +08:00
@lxy py 的 tuple 的(2, 3)是写成(2, 3,)的,而且这个和我的兼容方式无关,这个 tuple 也很蛋疼啊,过度设计
Chrisplus
2017-06-29 15:58:03 +08:00
python 3 最大的原罪,就是他的名字叫 python 3 吧……

如果叫 snake1 估计都没这么多口水
ipwx
2017-06-29 16:08:24 +08:00
@gouchaoer 首先,(2,3) 是没有问题的,和 (2,3,) 同义。(2,) 才是强制要写的。你肯定记错了。要不就是 f((2,3)) 的用法。但是 f((2,3)) 也可以不加最后那个逗号呀。

其次,我实在是不懂你为什么这么仇视 Python。我从学习 Python 以来已经六年了,学会写 2&3 兼容性代码、setup.py
以及完善的单元测试也已经两年了。我用 Python 写过很多东西,从脚本到网站( Flask + Webpack + Vue.js ),再到深度学习的模型( TensorFlow ),体验一直都不错。

我现在写 Python 的代表性作品可以参考 https://github.com/korepwx/mlcomp/tree/devhttps://github.com/korepwx/tfsnippet/tree/dev。另外我还给 https://github.com/thu-ml/zhusuan 贡献了点代码。

(事实上 TFSnippet 就是我在用 ZhuSuan 的过程中感觉有些东西写不出来,所以仿写并改写的一个轮子)。
northisland
2017-06-29 16:12:05 +08:00
优雅的 python 生了两个婊子,一个叫 2,一个叫 3
gouchaoer
2017-06-29 16:19:50 +08:00
@ipwx 那的确是我记错了,我其实大学本科的时候还蛮喜欢 py 的,后来语言接触多了发现 py 的很多设计很糟,但是还是一堆人跪舔,如果我当初要选一门脚本语言入门的话绝不会选 py ;你要说我仇视 py 那就仇视吧,我指出的问题那是实实在在,就事论事
bytelee
2017-06-29 16:24:29 +08:00
如果让你用了 Swift 你还不去 apple 总部自焚
ipwx
2017-06-29 16:40:41 +08:00
@gouchaoer 我的意见是这样的:我比较喜欢 Python,不是因为它语言有多好,而是因为它能很快完成我要做的一切事情。你看我要做的事情从 Web 开发(“写博客”遗留下来的爱好)到运维脚本(管实验室的服务器要用)到写深度学习的模型和在集群上调度实验脚本( PhD 的本职),样样都有。

我是不想开发个博客或者类似的 Web 应用就要去熟悉一下 C#、Java 或者 PHP 的程序栈,毕竟这只是我的爱好而不符合我的职业规划;我也不想学习 Bash 那种反人类的语法;至于深度学习就更别提了,靠谱的库全是 Python 的。

所以我喜欢用 Python,因为只有它能让我只熟悉一门语言就搞定所有事情。要不然,我还得同时维护好几个语言自己经常用的轮子代码吗?
ipwx
2017-06-29 16:43:35 +08:00
@gouchaoer 从我这样的需求出发看问题,你会觉得网上热捧那么多语言的人真是吃饱了撑着的。对我说的就是 OCaml、Haskell、Scala ……等各种语言的狂热爱好者,语法再好,功能再多,你能让我快快乐乐地写个 Deep Generative Model 吗?
jyf
2017-06-29 17:56:49 +08:00
@gouchaoer py 设计还行啊 就是实现蛮糟糕的 去看 ceval 就知道了
ShindouHIkaru
2017-06-29 18:20:01 +08:00
@gouchaoer 为了埋这个伏笔,你也是蛮拼的。。。
l00t
2017-06-29 18:51:41 +08:00
所谓向下兼容的意思就是你得保留所有错误。
lrxiao
2017-06-29 18:53:39 +08:00
建议这楼里的人都好好看看
https://docs.python.org/3/whatsnew/3.0.html
并且看看里面提案的 PEP 是怎么写的...

举几个优点黑点
优点:unicode 新式类 新的字符串格式化方法 各种各样更优雅的语法
缺点: 性能慢了 与旧库难兼容

就指着个 print 瞎喷...233333
lrxiao
2017-06-29 18:57:20 +08:00
像 Py2 这种 True/False 都不是关键字 while(1)和 while(True)因为这个 VM 没法优化...这不是屎设计吗
sagaxu
2017-06-29 19:12:22 +08:00
@gouchaoer 所以你选择了最优雅的 php
sagaxu
2017-06-29 19:13:52 +08:00
@lrxiao 3 的性能已经赶上 2 了,3.6 的 dict 是优化过的,还是保序的
lrxiao
2017-06-29 19:16:15 +08:00
@sagaxu 嗯是的 忘记提了...
mingyun
2017-06-30 00:19:34 +08:00
可能需要这个 pip install 3to2
zjlin1984
2017-06-30 08:42:31 +08:00
看了很多评论

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

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

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

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

© 2021 V2EX