Py 3 毫不犹豫,强烈反对说什么向后兼容什么历史原因,就是因为你们 Py 3 才被抹黑成这样的。之前看到个幻灯片,说不用Py3的你们错过了什么,我找找。(前几期码农周刊看到的,没时间找了,这个答案是我凭着一口怒气用手机码的。)
十个碉堡了的 Python 特性,你不能用是因为你拒绝升级 Python 3
你真以为向后兼容就是兼容?Python(社区)在 2 到 3 的兼容已经做了大量大量大量的工作了。2to3 你们都知道,这个你们也该知道:Six: Python 2 and 3 Compatibility Library
现在 Py 2.7 向前兼容已经很好了,很多库同一套代码兼容 2.7 和 3,这叫不能兼容?哪个平行语言一套代码直接能用到另一个语言上?这叫平行语言?
平心而论,有断层,但是确是容易弥补的。
你们真以为那么多年 Py3 的更新都是吃白饭的?一个现代时髦脚本语言离开了不断的特性更新,只有半死不活的安全维护,这算活着!?
醒醒吧,社区正在不断向 3 迁移,虽然手头没有数据,但是不信可以写代码去 GitHub 之类的地方统计一下,Py 3 的支持是什么样的趋势。当年确实不方便用 3,因为没什么库,我因为这样的考虑入门也是用的 2 ,现在年复一年,一个又一个的库迁移了,你们还是一套说辞,这不是惯性不是惰性是什么?
现在还不支持 Py 3 的库大多是常年无人维护的东西了,当然还有少数必须的,比如说 OpenCV,但这不是放弃 Py3 的理由,人家问的是初学者,对于初学者来说不需要考虑公司用什么,不需要考虑计算某种化学数据的库是不是用 Py2 写的,人家到时候要用回 Py 2 稍微注意一点就行了——我现在实习中用 Py 2 也就是一直被编码搞得很恼火,其他没遇到什么问题。
3.X版本的没有pandas、matplotlib、scipy库
请问你是哪个时代的Py3?难道你是坐时光机过来的??我用 Py3 处理数据机器学习处理图片,欢得很。
你打算把你的生命浪费在处理编码问题,体会那些早已过时的语法吗?一想到 map filter 竟然生成一个 list 我就心寒。
2.7 已经永不添加新的特性了,只会修复原有安全问题。
PyPy,各大 Web 框架,科学计算包(SciPy.org — SciPy.org),都已完美支持。(PyPy 是最近成熟支持的,http://morepypy.blogspot.jp/2014/06/pypy3-231-fulcrum.html,这也说明了趋势)
不要活在过去啊。
如果你们真信了向 Py 3 迁移要十年的话,Py 3 的迁移就需要无限年,你仔细尝试一下,那么向 Py 3 迁移只需要五分钟。
我不是说你不能用 2,纯粹看工程需要甚至个人喜好,但我需要破除对 3 的偏见。你说我喜欢 2 要用 2,你说你的代码依赖 2 要用 2,我举双手支持。但是你说新手别学 3,因为没人用 3,3不好学没有库,我就不敢苟同了。你是你,我不能强求你任何事情,哪怕你用 Py1 我都管不着。
编码问题,首先这个问题是对初学者来说的,如果你觉得初学者学习 Python 要懂得 Python 的 str 类型是 byte array ,每一个字只有一个字节的空间,如果要放中文必须把一个中文用多个字节编码放进 str 用得时候组合起来,或者用另外一个类型……的话,那我无话可说。其次,就算你独善其身,你也可能碰到库翔一样的 unicode 支持。
库问题,这是我的答案一直在说的——有名的库纷纷支持 Python 3,没有历史包袱的话使用 Python 3 基本不会碰到任何问题。
语法差异是不大,这就是两者能做到兼容的基础。那么对于一个新手学习来说,应该去学虽然资源丰富但是终将死去的 2,还是去学 3?应该忍受 class Foobar(object): 还是轻松地写 class Foobar: ?应该是 input_raw 还是直接 input?
对于上一条的补充,我说 Python 2 资料丰富,但实际上很多 Python 的资源是两者共享的(大多数问题是库问题。)其次,现在的 Py2 教程什么的也太老了——当然你说你百度搜索某个问题出来个百度空间的知其然不知其所以然的解决方法是宝贵的遗产的话那我无话可说。
如果你们真的,真的,真的先入为主地把 2 和 3 已经当做两个不同的语言了那还怎么谈?__future__ 真的哭晕在厕所啊。
更新 3 的局限,你们自己看,有这方面需要的人或许比较适合Python 2,欢迎补充指正:
OpenCV
OpenStack
一些云平台,比如 GAE
cz_freeze 不能将 Python 脚本打包成单独的 exe 文件
http://www.zhihu.com/question/24549965/answer/28177762