中企动力 > 头条 > python2和3区别

网站性能检测评分

注:本网站页面html检测工具扫描网站中存在的基本问题,仅供参考。

python2和3区别

该学 Python 2 还是 Python 3 互联网视频课程

img

权安蕾

关注

题图:from Instagram

在 Python 3 出现之前,Python 在我眼里一直是一位稳重扎实的大叔,资历深厚,语法简单,功能强大,兼顾面向对象和函数式编程,库包丰富程度让其他语言转过来的程序员瞠目结舌并喟叹:人生苦短,要用 Python 啊……这种情况一直持续到 Python 3 的出现。

一个语言的版本升级是极为普通的事情,不升级才不正常,但 Python 3 是个例外,因为 Python 3 放弃了向下兼容,也就是说,你在 Python 2 系列版本中写的代码,一直运行的好好的,放到 3 的环境里,有 99% 的可能性不能正常运行。最简单的,你在 Python 2 中打印语句print "Hello World",放到 Python 3 里,系统会告诉你「SyntaxError: Missing parentheses in call to 'print'」。刺激不刺激?

Python 的开发者为什么要这么做呢,或者说为什么会出现 Python 3?在很长一段时间内,没人解释这事,Python 的创造者们认为,这不是很显然的嘛。这就像一个具备超高幽默感的人听到一个冷笑话乐得前仰后合哈哈大笑,另一个人 —— 比如普通开发者 —— 把一颗冰凉的花生米放嘴里边嚼边问,哥们,你特么到底笑啥呢?

为什么会有 Python 3 的存在?Brett Cannon —— Python 的核心开发者 —— 在一次问答活动中终于做了一个合理的解释。在此之前他一直神奇的认为大家都清楚为什么 Python 3 会出现。他说:

回想起来我真是太傻了,竟然认为大部分人 —— 不管是刚接触 Python 或者已经有一段时间 —— 要么应该知道,要么有好奇心去获取一个解释或答案。但是并没有。所以我会解释一下为什么 Python 3 会存在。为什么要破坏兼容性,改变 unicode/str/bytes,使得老代码移植到 Python 3 非常困难。

最根本的原因是,在 Python 2 中文本和二进制数据是一个烂摊子。比如 'abcd' 这个表达式,在 Python 3 中,语义非常明确,就是包含四个字母的字符串,但是在 Python 2 里,可以是四个字母的字符串,也可以代表 97、98、99、100 的数组。你可以使用print ord('a')获取到这个字母的 ASCII。总之,在 Python 2 中,对于 str 代表的含义有两种,这改变了语言的唯一性。而在 Python 3 中答案是唯一的。

「Python之禅」里讲过,「找到一种或唯一的一种解决方案去解决问题」。文字既能代表文本数据又能代表二进制数据这很麻烦。一旦对象脱离我们的控制,就会让人变得恐慌。有人说我们可以用 Unicode,但实际中人们并不会那么做,有事还会引发不必要的麻烦。比如在 Python 2 中,中文显示是这样的:

>>> geektime = “极客时间”

>>>geektime

'\xe6\x9e\x81\xe5\xae\xa2\xe6\x97\xb6\xe9\x9\xb4'

Python 3 就简明很多:

'极客时间'

简化语言,移除 str 的二义性能够减少代码的出错率。避免 bug 是一件很重要的事情,但却经常被人遗忘。Python 之禅中的另一句话「清晰胜于晦涩」也表达了这个意思,歧义和隐性知识使得代码不容易沟通,并容易形成 bug。

正如 Brett Cannon 所言,人们有时会忘记 Python 有多久的历史了

1989年的冬天,Guido 为了度过一个有意义的圣诞节开始编写 Python 语言的编译器和解释器。1991年2月,第一个 Python 版本诞生,编译器是 C 语言实现的。这意味着 Python 的出现早于 1991年10月发布的第一版 Unicode 标准。后面出现的语言,比如 Java,Ruby 等都选择在支持 Unicode 的标准上实现自己的 str 类型,这就让 Python 3 变得很尴尬。2004年 Python 3 的方案开始酝酿,开发者们意识到,支持 Unicode 和来自任何语言的的文本是非常重要的。

Python 是一门面向世界的语言,而不只是那些支持 ASCII 码覆盖的罗马数字的语言。这是 Python 3 在处理文本时选择使用 Unicode 的原因。

Python 3 的开发过程大致是这样的:

在 2004 年我们开始开始设计 Python 3。我们清楚 Python 的受欢迎程度在不断上升,我们也希望能够延续这种势头。但这也同时意味着如果我们想及时修正所有的设计缺陷来保证它的受欢迎度,最好趁现在而不是以后。我们设想 Python 3 相较于 Python 2 会持续更长一段时间,而 Python 2.7 仅仅是用来维护以前遗留的项目,不会用于新项目中,那用 Python 3 写出的代码一定会多于用 Python 2 的。所以我们决定来承受由 Python 2 向 3 转型之痛。并且在这种设想下开发了 Python 3。

以后我们再也不会做这种打破向后兼容性的事情。

但是事情显然没有开发者想象的那么简单,由于缺乏向下的兼容性,而且 Python 2 的代码历史悠久,库包丰富,并且大部分程序都是生产环境的应用,迁移成本太高,看不到显而易见的好处。另外,由于 Python 2 是如此好用以至于开发者们掌握了熟练的技巧避免 str 带来的陷阱。发布完 Python 3 之后,Python 的核心开发者们认为社区会最终摒弃上一个版本,痛痛快快的转向新世界。但事与愿违,两个版本并存的情况持续了近十年之久。Python 的开发者们又花费了更多的时间设计了一个 Python 2/3 的兼容子集来实现这种过渡。

关于 Python 2 和 3的主要区别,可以参考这篇文章:

http://runoob/python/python-2x-3x.html

那么该学 Python 2 还是 Python 3 呢?如果是五年前我推荐学习 Python 2,两年前我推荐都要学都要掌握,事实上在 Mac 环境里用 homebrew 安装和使用两个版本的环境是非常方便的。时至今日,大量的库已经开始普遍支持 Python 3 了,而且 Python 3 的特性已经远远不是解决 str 问题了,所以现在我会推荐你直接学习 Python 3。

看看 Instagram 的案例,在相当长的一段时间,Instagram 都跑在 Python 2.7 + Django 1.3 的组合之上。在经过一系列的讨论后,他们最终做出一个重大的决定:升级到 Python 3。

Python 3 有什么优势呢?新特性,比如类型注解 Type Annotations;提供了更好的性能;并且社区的支持重心已经完全迁移到 Python 3,有什么理由再去使用 Python 2 呢?

关于 Instagram 和 Python 的故事,大家可以下载「极客时间」,找到热点专题里的「编程语言」,一篇长文,有详细的描述。

Python 相关文章:

人生苦短,我用 Python

Python 之禅

Python 的进击

点击阅读原文,下载极客时间 iOS 版。

Python2.x与Python3.x版本区别 流量视频课程

img

王涵易

关注

Python2.x与3.x版本区别 Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。 为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。 许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。 为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Py..

Python2.x与3.x版本区别

Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。

为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容。

许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行。

为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。

新的Python程式建议使用Python 3.0版本的语法。

除非执行环境无法安装Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。

大多数第三方库都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。

主要变化

Python 3.0的变化主要在以下几个方面:

print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

print "fish"print ("fish") #注意print后面有个空格print("fish") #print()不能带有任何其它参数然而,Python 2.6实际已经支持新的print()语法:

from __future__ import print_functionprint("fish", "panda", sep=', ')新的str类别表示一个Unicode字串,相当于Python 2.x版本的unicode类别。而位元组序列则用类似b"abc"的语法表示,用bytes类表示,相当于Python 2.x的str类别。

现在两种类别不能再隐式地自动转换,因此在Python 3.x里面"fish"+b"panda"是错误。正确的写法是"fish"+b"panda".decode("utf-8")。 Python 2.6可以自动地将位元组序列识别为Unicode字串,方法是:

from __future__ import unicode_literalsprint(repr("fish"))除法运算符"/"在Python 3.x内总是返回浮点数。而在Python 2.6内会判断被除数与除数是否是整数。如果是整数会返回整数值,相当于整除;浮点数则返回浮点数值。

为了让Python 2.6统一返回浮点数值,可以:

from __future__ import pisionprint(3/2)捕获异常的语法由except exc, var改为except exc as var。使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支援这两种语法。集合(set) 的新写法:{1,2,3,4}。注意{}仍然表示空的字典(dict) 。字典推导式(Dictionary comprehensions) {expr1: expr2 for k, v in d},这个语法等价于result={}for k, v in d.items(): result[expr1]=expr2return result集合推导式(Set Comprehensions) {expr1 for x in stuff}。这个语法等价于:

result = set()for x in stuff: result.add(expr1)return result八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支援这两种语法。dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。如果两个物件之间没有定义明确的有意义的顺序。使用<, >,<=, >=比较它们会投掷异常。比如1< ""在Python 2.6里面会返回True,而在Python 3.0里面会投掷异常。现在cmp(), instance.__cmp__()函数已经被删除。可以注释函数的参数与返回值。此特性可方便IDE对原始码进行更深入的分析。例如给参数增加类别讯息:def sendMail(from_: str, to: str, title: str, body: str) -> bool: pass合并int与long类型。多个模块被改名(根据PEP8):旧的名字新的名字_winregwinregConfigParserconfigparsercopy_regcopyregQueuequeueSocketServersocketserverreprreprlibStringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。取消了exec语句,只剩下exec()函数。 Python 2.6已经支援exec()函数。

企业里Python2和3哪个用的多?为什么? 企业视频课程

img

宛白

关注

python2和python3的差异

如果你是一个初学者,或许你曾经触摸过其他的编程言语,你可能不知道,在开端学习python的时分都会遇到一个比较让人很头疼的问题:版别问题!!是学习python2 仍是学习 python3 ?这是十分让人纠结的!

查找一下便会发现python3 和 python2 是不兼容的,并且差异比较大,究竟学习哪个版别呢?

所以先学 Python2 仍是 Python3 都不是问题,或许说都是问题。可是现在总算不必纠结这个问题了!哈哈,好开心

因为一个开发者已经发布了一个网站来倒计时Python 2.7的“退休”。

能够看出,Python 2.7有望在两年后退休。

开发商表明,因为官方的日期没有发布,估计Python 2.7会在2020年4月12日退休,这是时刻的时分,pycon将举办。

Python 2,感谢您多年的忠诚服务。

巨蟒3,现在你在舞台上。

Python 2.7是2 x系列的最终一个版别。它的继任者Python 3在2008年12月发布,但它与2。X系列不兼容。3的3的特征和语法被移植回2.6和2.7。2.7的支撑时刻至少为10年,并将在2020之前供给过错批改。

怎么转换为Python 3?

如果您的主代码仍然根据Python 2,这是完全能够了解的。最流行的包PyPI上现在能够运转在Python 2和Python 3,添加更多的日常。为了简化转换,官方搬迁指南供给了在Python 3中运转Python 2代码的主张。

所以我主张:

1. 如果是你在企业中,需求用到python而学习python的话,那就要看企业的使用python的版别进行学习;

2. 如果想要更多的老练解决方案,最少的bug,最安稳的使用那就用python2 ;

3. 如果你是在读大学的学生,那我主张你学习python3,比及结业的时分或许python已经成为了干流。

另外,选2仍是3一般都是编程小白才会考虑。考虑的起点是作为一个初学者,有时候在学习的过程中会出现一些问题或者会参考一些项目去学习,这个时候会想一下,2是干流或者是3。已然刚学何不找个干流的。其实不管是2仍是3,只需照这一个学,就可以了。中心的差异在学习的时候也能更好的去加深一些形象

img

在线咨询

建站在线咨询

img

微信咨询

扫一扫添加
动力姐姐微信

img
img

TOP