刚开始学python的时候,很疑惑为什么python2和python3同时存在。当时我就想,不就是印刷不一样吗?是不是编码有点不同?为什么要让它如此分裂?
知乎上有个问答:Python 2和Python 3的主要区别是什么?看了之后,大部分的回答都是在罗列“python2和python3在语法和功能上有什么区别”或者“python3相比python2有哪些改进”。我不打算列出一个列表,我试图回答这个问题:是什么让 python 社区决定使用 python3?
0x01 几个重要的发展时间点
1968 ASCII标准发布
这个时期计算机几乎都是 8 bits 的
numeric values (0 - 127)和字符一一对应,比如字符 ‘a’ 对应的 numeric value 对应
ASCII 仅适用于美国人,这意味着无法支持其他语言系统。
Guido于1989年开始开发python语言,并于1991年2月正式发布第一个版本
1991 年 8月份 unicode 标准发布
使用 16 bits,意味着能存放 65,536 个不同的字符
这也是目前使用最广泛的编码标准。
2004年 python 社区开始筹划 python3。
由此可见关键点:python正式发布的时候,unicode标准还没有出现。 Python在后期的开发过程中确实加入了对unicode的支持,但这只是一个可选的特性,并不是强制的!
0x02 python2 str 对象的不确定性
'abcd'
如果你是 python3 用户,你会说它是一个包含“a”、“b”、“c”和“d”的字符串。
如果你是 python2 用户,你可能会说这是一个包含“a”、“b”、“c”和“d”的字符串,或者你可能会说它表示 97、98、99 和 100 个字节。
这意味着你必须非常小心地知道你的 str 对象是文本还是字节,否则你可能会在代码中埋下错误。
没错,只要你是一个足够细心,真正“合格”的程序员,这些问题都是有解决办法的。但!这样的假设是不现实的。程序员也是人,做人就意味着犯错!
0x03 哲学层面的考量
设计任何适用于所有人的系统都需要在原子级别上格外小心和细节。
数据类型是编程语言最基本的组成部分。从哲学的角度来看,建造建筑物的原子具有这种不确定性是不可接受的!
Python之蝉 里面有一句话:
There should be one— and preferably only one —obvious way to do it.
为了完成一件事情,给开发者过多的选择是不好的,因为这可能会带来沟通成本和选择成本的增加,得不偿失。
python核心开发者 Brett Cannon 在他的一篇文章 Why Python 3 exists 中说:
And we made the change when we did because we figured the sooner the better.
the sooner the better ,一定要做的事越早越好。
但他也表示,从python2到python3这么大的“向后不兼容”变化不应该再发生,因为这对开发者确实不友好。
0x04 总结一下
Python2 str 对象的歧义,这种原子级别的歧义是不可接受的。
Python2 unicode 只是可选的,不是必需的。可选意味着没有人选择它。 Python3开始默认支持unicode。
the sooner the better ,必做的事尽早做。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何引入类python12/21
- ♥ python浮点数占用多少字节?08/25
- ♥ 64位操作系统如何下载Python3.7?11/28
- ♥ 消除抑制警告的python方法10/09
- ♥ 如何判断python中的数组是否为空09/08
- ♥ python的eclipse是什么10/30
内容反馈