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

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

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

按投票排序按时间排序

46 个回答

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

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

from __future__ import division, print_function

作者保留权利

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

用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对象。这个问题最近得到了解决。解决中遇到了如下一些问题:

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进行比较。

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

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

作者保留权利

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

编码问题,首先这个问题是对初学者来说的,如果你觉得初学者学习 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 文件

待补充

作者保留权利

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

楼主首先要搞明白一件事,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各个函数的用法。

作者保留权利

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

知乎用户,好读书,不求甚解

Python3,很多库已经支持上来了,可以开始使用了。

光是python3里面字符串默认全是unicode这点就可以让我抛弃python2。

作者保留权利

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

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

作者保留权利

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

刘惟楚,属蛇

作为没有历史包袱的初学者,自然应该选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,一样活得很开心。

作者保留权利

pandas python2.3版本_应该学习最新版本的 Python 3 还是旧版本的 Python 2?相关推荐

  1. 苹果ipa签名工具免越狱下载_苹果iphone免越狱使用iTunes 一键下载旧版本app

    所需工具:iTunes 12.6.3 和苹果旧版APP下载V1.3(后台回复1077获取) 适用系统:win 哈喽大家好,欢迎来到蜜蜂科技f app更新了,更新后功能的缺失,操作步骤的繁琐,容易闪退卡 ...

  2. java编译器jdk版本_以编程方式确定Java类的JDK编译版本

    java编译器jdk版本 当需要确定使用哪个JDK版本来编译特定的Java .class文件时, 通常使用的方法是使用javap并在javap输出中查找列出的"主要版本". 我在我 ...

  3. 五、pip升级、python升级及旧版本删除

    1. pip升级 长时间没用的python,系统提示pip版本太低了,建议升级 但不要根据它的提示升级,应使用一下命令即可: python -m pip install --upgrade pip 等 ...

  4. JAVA EXE和zip版本_如何将最新的JRE / JDK作为zip文件而不是EXE或MSI安装程序? [关闭]...

    问题 我喜欢通过复制Java文件夹的内容和设置环境变量来确保一切正常. 我通常在虚拟机中运行安装程序,压缩\ java文件夹内容,返回虚拟机的快照,然后解压缩压缩文件. 我找不到最新的JRE / JD ...

  5. 苹果微信更新不了最新版本_微信,最新版本更新,为何要将字体变小

    微信上次更新,将背景强制换成了白色底版,一直被大家吐槽 这次微信又推出新版本了,因为之前版本已经是回不去了,所以不少人秉持着,再差也差不到哪里去的心理,又更新了 只是在这微信最近版本更新之后,又是被用 ...

  6. git安装后找不见版本_无法安装最新版本的Gitlab

    这个问题不是代码,而是 Gitlab的安装. 我现在试图安装Gitlab几天没有成功. 实际上,很久以前,他们提出了使用wget的方法非常好,但由于我们必须使用Curl的方法,所以不可能比下载更进一步 ...

  7. abaqus对应python版本_如何学习abaqus的python脚本?

    首先,python基础,市面上书特别多,就不用推荐了. 下面有人推荐曹金凤博士的书,那本书很好,但稍有些旧了.参考书的话simwe论坛的苏景鹤和江丙云写的<ABAQUS Python二次开发攻略 ...

  8. 天正对应cad版本_天正CAD提示找不到可用的AutoCAD版本怎么办? - CAD自学网

    很多设计行业的童鞋换了新电脑后,新电脑安装的是64位的vista或win7.win8.win10,轻车熟路地安装了AutoCAD2008和天正8,一切准备OK准备打开天正8大干一番事业的时候,突然发现 ...

  9. unity3d发布linux版本_密码管理器 1Password 发布第一个 Linux 测试版本

    1Password 是知名的跨平台密码管理器工具,刚刚发布了第一个 Linux 测试版本,拥有创建.搜索建议.共享.剪贴板清理.快捷键等功能.@Appinn 虽然青小蛙不是 Linux 桌面用户,但为 ...

最新文章

  1. 用python实现todolist_So easy !用 Python 开发一个todolist
  2. MATLAB-字符串
  3. java多线程绘图_菜鸟学Java之 Java2D 多线程绘图
  4. Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】
  5. 学python爬虫用win电脑还是mac?
  6. 单身两年以上是什么体验?
  7. bash:pip:找不到命令
  8. Native method not found: com.autonavi.amap.mapcore.MapProjection.nativeLonLat2Geo:(DDLcom/autonavi/a
  9. win10pe系统计算机名修改,pe 重置win10登陆密码怎么操作_如何用pe系统重置win10电脑密码-win7之家...
  10. 黑盒测试方法(五)正交实验设计方法
  11. Altium designer原理图检查(编译检查)
  12. CodeForces 1009 D. Relatively Prime Graph(思维)
  13. 什么是全栈工程师,如何成为全栈工程师
  14. 服务器国产linux操作系统,国产linux操作系统适于做服务器系统的有哪些
  15. 2. 一元函数微分学
  16. 什么是iu组装服务器,IU李知恩和“买家秀”在“教科书”级别的私有服务器共享是邻居...
  17. mysql 获取某个时间段每一天、每一个小时的统计数据
  18. ManjaroLinux扩展显示器,连接显示器。
  19. 超详细Redis入门教程——Redis命令(上)
  20. 时间转换 MJDUTC

热门文章

  1. INTP型人格的性格缺陷和心理问题分析
  2. 感想集合,好好学习天天向上吧
  3. 二值图像分析—Hu矩实现轮廓匹配
  4. 极限编程(eXtreme Programming)简介
  5. c语言随机点名器(源码)
  6. C++使用libCurl访问12306网站实现登录查询车次信息
  7. .style与.style.cssText
  8. 无源蜂鸣器与源蜂鸣器
  9. 天威诚信荣获「金融科技领域最具品牌影响力奖」
  10. windows7停售,win8被禁,安装汉澳sinox正其时,sinox支持大部分windows软件