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

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

看到最新Python版本是3.4,可是网上的资料,包括出版的书籍,都是最晚到13年左右,不少细节都不一样,语法也过期了。

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

2 条评论 java

分享python

按投票排序按时间排序c++

46 个回答

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

LiTuXecho "127.0.0.1 http://zhihu.com">…github

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

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

from __future__ import division, print_function

发布于 2014-07-20 2 条评论 感谢 设计模式

分享api

 收藏  没有帮助  

举报

    做者保留权利

赞同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 添加评论 感谢 

分享

 收藏  没有帮助  

举报

    做者保留权利
相关文章
相关标签/搜索