首页 > 编程语言 > 详细

应该学习最新版本的 Python 3 还是旧版本的 Python 2?

时间:2015-11-12 16:18:20      阅读:399      评论:0      收藏:0      [点我收藏+]

应该学习最新版本的 Python 3 还是旧版本的 Python 2?

看到最新Python版本是3.4,但是网上的资料,包括出版的书籍,都是最晚到13年左右,很多细节都不同,语法也过时了。

那此时应该直接学习3.X还是2.X?如果前者的话,有什么推荐的资料或者书么?最好中文。英文看起来效率会比较低。

2 条评论 

分享

按投票排序按时间排序

46 个回答

赞同9反对,不会显示你的姓名

技术分享LiTuXecho "127.0.0.1 http://zhihu.com">…

dropwater叶飘潇雨知乎用户 等人赞同

必须果断学 3,并且,万一有需要要写 Py2 的东西,记得最开始写上

from __future__ import division, print_function

发布于 2014-07-20 2 条评论 感谢 

分享

 收藏 ? 没有帮助 ? 

举报

  ?  作者保留权利

赞同5反对,不会显示你的姓名

技术分享QAMichaelPeng北美码农

钱亦成胡淦森张玥 等人赞同

用Python做爬虫的注意一下,scrapy不支持Python3。 Frequently Asked Questions
这里有篇文章讲scrapy的迁移工作:Scrapy on the Road to Python 3 Support

主要原因是Twisted还不完全支持Python3. 虽然Twisted大部分是可移植到python3的,但Twisted的http agent并不支持Python3.
scrapy团队两年前就开始了向python3的移植工作。现在scrapy每次提交都有一部分测试在python3下执行。

除了Twisted, 移植的另一个大问题是Request和Response对象。这个问题最近得到了解决。解决中遇到了如下一些问题:

  1. HTTP headers应该是byte还是unicode?key和value需要区别对待么?一些headers如cokies通常是UTF-8, HTTP Basic Auth通常是latin1编码。其他的headers却没有一个通用的编码。通常用bytes表示HTTP headers是合理的。但有一个问题:如果你将现有代码从Python2.x移植到3.x,一些以前运行正常的代码可能会悄悄的出错。比如一个HTTP response包含"content-type: application/json".如果headers用bytes表示,在Python2.x中,content_type == ‘application/json‘返回True, 但在Python3.x中就会返回False,因为你在拿Unicode字面量和bytes进行比较。

  2. 如何正确的进行百分比转义和反转义?正确转义依赖于网页的编码和该转义URL的哪部分。如果网页使用非ASCII编码就可能有问题。经过一些实验后我们发现浏览器在干一些很疯狂的事情:URL路径在转义之前进行了UTF-8编码,但query string在转义前却使用了网页里的编码。你不能依赖浏览器在界面上显示了什么来判断URL的编码,在OS X和Linux上,每个FireFox和Chromed发送给服务器的都是UTF-8编码的路径和网页编码的query string.但它们显示给用户的则依赖于浏览器和操作系统。

  3. URL相关的函数在Python2.x和3.x中有很大不同。Python2.x中这些函数只接受bytes,Python3.x中只接受Unicode. 这和疯狂的编码问题搞在一起让代码移植变得越发困难。

编辑于 2015-10-11 1 条评论 感谢 

分享

 收藏 ? 没有帮助 ? 

举报

  ?  作者保留权利

赞同415反对,不会显示你的姓名

技术分享徐酿泉底层不熟

戴子天知乎用户、潘奋图 等人赞同

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 我都管不着。

  1. 编码问题,首先这个问题是对初学者来说的,如果你觉得初学者学习 Python 要懂得 Python 的 str 类型是 byte array ,每一个字只有一个字节的空间,如果要放中文必须把一个中文用多个字节编码放进 str 用得时候组合起来,或者用另外一个类型……的话,那我无话可说。其次,就算你独善其身,你也可能碰到库翔一样的 unicode 支持。

  2. 库问题,这是我的答案一直在说的——有名的库纷纷支持 Python 3,没有历史包袱的话使用 Python 3 基本不会碰到任何问题。

  3. 语法差异是不大,这就是两者能做到兼容的基础。那么对于一个新手学习来说,应该去学虽然资源丰富但是终将死去的 2,还是去学 3?应该忍受 class Foobar(object): 还是轻松地写 class Foobar: ?应该是 input_raw 还是直接 input?

  4. 对于上一条的补充,我说 Python 2 资料丰富,但实际上很多 Python 的资源是两者共享的(大多数问题是库问题。)其次,现在的 Py2 教程什么的也太老了——当然你说你百度搜索某个问题出来个百度空间的知其然不知其所以然的解决方法是宝贵的遗产的话那我无话可说。

  5. 如果你们真的,真的,真的先入为主地把 2 和 3 已经当做两个不同的语言了那还怎么谈?__future__ 真的哭晕在厕所啊。


更新 3 的局限,你们自己看,有这方面需要的人或许比较适合Python 2,欢迎补充指正:

  1. OpenCV

  2. OpenStack

  3. 一些云平台,比如 GAE

  4. cz_freeze 不能将 Python 脚本打包成单独的 exe 文件

  5. 待补充

编辑于 2014-07-26 93 条评论 感谢 

分享

 收藏 ? 没有帮助 ? 

举报

  ?  作者保留权利

赞同38反对,不会显示你的姓名

技术分享adv adj

成宇实名认证知乎用户 等人赞同

楼主首先要搞明白一件事,python语言的最大优势并不是语言本身的特性,而是它拥有脚本语言中最丰富的第三方包(模块,库或者叫什么也好),这回其他任何语言都无法比拟的巨大优势。


很多人学python并不是因为python适合开发什么软件或者工程,而是因为python拥有某个非常适合他们工作相关领域的简单易用的工具包。


所以,学pyhton2还是3关键要考虑的是你所准备使用的模块是否支持3.x.


以我为例,我使用python主要用于实验也就是科学计算,我的主要研究方向是神经网络,常用的模块包括numpy, scipy, theano, pylearn2,在这几个模块中前两个貌似已经有3.x版,但是后两个短期内几百年没有可能出现3.x版,而他们正好是GPU实验必不可少的模块。


在这种情况下,我当然要继续坚持使用python2了。


总而言之,我的建议是,学python,首先要明确自己要做什么任务,要使用哪些模块,以自己需要的模块为中心学习,而不是像学习c++和java那样以语言本身或者设计模式为主要学习内容。这一点其实与matlab很相像,只学习matlab的语法可以说毫无意义,真正有用的是学习你所需要的matlab各个函数的用法。

编辑于 2014-07-22 7 条评论 感谢 

分享

 收藏 ? 没有帮助 ? 

举报

  ?  作者保留权利

赞同17反对,不会显示你的姓名

技术分享知乎用户好读书,不求甚解

穷小子李作腾知乎用户 等人赞同

Python3,很多库已经支持上来了,可以开始使用了。
光是python3里面字符串默认全是unicode这点就可以让我抛弃python2。

发布于 2014-07-20 1 条评论 感谢 

分享

 收藏 ? 没有帮助 ? 

举报

  ?  作者保留权利

赞同1反对,不会显示你的姓名

技术分享Achilles Kars编程初心者、小角色、

陈永仁 赞同

( ???) 说好的「There‘s Only One Way To Do It」呢?

发布于 2015-04-28 2 条评论 感谢 

分享

 收藏 ? 没有帮助 ? 

举报

  ?  作者保留权利

赞同13反对,不会显示你的姓名

技术分享刘惟楚属蛇

李一段子望HH AHH 等人赞同

作为没有历史包袱的初学者,自然应该选3.x。

Python2orPython3 说,除非:1.要用只有2.x才有的库,2.你被要求非要用2.x。否则选该选3.x。

2再好再主流,未来的份额只会有降无升。语法上来说,3.x填了很多坑,用户体验优于2.x(换言之,用起来爽)。2.x每次from future import xxx难道不累么?future早就已经摆在你们面前了。

论lib支持度:https://python3wos.appspot.com/ 最常用的200个lib现在只有35个还是红的了,而且还会逐渐降低。在连超级大坑Pypy都已经支持3.x的今天,py3k生态圈不成熟什么的已经不成说辞了。

LPTHW说2.x还可以战十年:zed这句话是2010年说的。现在10年也过了一半了。现在有大把人(比如我)只用3,一样活得很开心。

发布于 2014-07-21 添加评论 感谢 

分享

 收藏 ? 没有帮助 ? 

举报

  ?  作者保留权利


应该学习最新版本的 Python 3 还是旧版本的 Python 2?

原文:http://my.oschina.net/airship/blog/529418

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!