该学 Python 2 还是 Python 3

姓名:姚丽冰 学号:16050120089

原文链接 mp.weixin.qq.com

题图:from Instagram

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

【嵌牛鼻子】:python2,python3,兼容性,转型

【嵌牛提问】:python3为何出现,python2、python3的对比,该学python2还是python3

【嵌牛正文】:一个语言的版本升级是极为普通的事情,不升级才不正常,但 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 就简明很多:

>>> geektime = “极客时间”>>> geektime'极客时间'

简化语言,移除 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://www.runoob.com/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 相关文章:

人生苦短,我用 PythonPython 之禅Python 的进击

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容