知行编程网知行编程网  2022-12-16 08:00 知行编程网 隐藏边栏  0 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于是什么原因,让 python 社区做出了非 python3 不可的决定的相关知识,希望可以帮到处于编程学习途中的小伙伴

python社区做出非python3决定的原因是什么

刚开始学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 ,必做的事尽早做。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享