《Python硬件编程实战》——2.2 Python的两大版本

2.2 Python的两大版本

目前Python主要有两个大的版本:
Python 2
Python 3
Python两大版本的不同写法
关于两种版本的对比,也常写成为
Python 2.x VS Python 3.x
Python 2 VS Python 3
py2 VS py3
读者以后看到类似写法,明白其指的是Python 2和Python 3就可以了。
2.2.1 Python版本历史
为了更深入地理解Python 2和Python 3的区别,此处先简要介绍Python版本的发展历史。
Python从1989年诞生起到现在,按照主版本号的不同,主要有1、2和最新的3。下面介绍一下其中相对使用较广的几个版本。
1. Python 1.6
相对来说,最早的Python 1.x系列的版本中,使用得比较广泛的就是Python 1.6左右的版本了。
2. Python 2.7
截至笔者写稿的2014年,Python的2系列的版本中用得相对最广泛、最流行的版本要数Python 2.7.x系列的版本了。
很多操作系统和平台中,包括现在主流的Ubuntu,Mac OS等系统中预装的Python都是Python 2.7.x的版本。
3. Python 3.x
此处所说的Python 3.x主要指的是2014年前后,Python刚刚发展到的3系列的版本。从Python 2到Python 3是一个很大的变化。这些变化包括很多基本的元素、函数接口和定义、设计理念等方面。虽然,这些变化总的来说在向好的方向进化,但是由于Python 3的变化,导致和旧的Python 2不太兼容,而之前Python 2系列的版本使用得太广泛了,包括很多第三方的库函数都是Python 2版本的,从而导致对于第三方库函数来说,如果需要全部支持Python 3则需要很大的改动,涉及的代码工作量和测试工作很多,所以现在很多第三方库函数暂时没有支持Python 3,或者是对于Python 3的支持还不够稳定。
所以当前的结论是,虽然Python 3是以后的趋势,但是目前多数人还在继续使用Python 2。
2.2.2 Python 2和Python 3之间的区别
介绍了Python各版本的基本历史后,下面再来详细解释Python 2和Python 3的区别。
Python2和Python3在很多基本的、最常用的函数和接口方面都变了,所以也会导致一些问题。其中最典型的要数前面提到的print函数的语法错误了。
例2.1 Python 3中print出现语法错误
在安装了最新版本的Python 3后却参考并运行了他人Python 2的示例代码,其中有用到print函数,结果就会导致print函数的语法错误:“SyntaxError: invalid syntax”。
介绍一个真实的案例,之前遇到了某个Python初学者就出现了如图2-1所示的错误。
1. print函数的基本语法
为了更清楚地解释此问题,需要先解释一下print函数的基本语法:
Python 2: print函数不带括号
Python 3: print函数必须带括号

图2-1 Python 3中print出错
下面详细阐述:
(1)print中不带百分号格式化的
python 2

print "Pyhon 2 can use print string without ()";

python 3

print("Python3, print must use () to output string");

(2)print中带百分号格式化的
python 2

print "old %s version is %d, print no ()"%("Python", 2);

python 3

print("new %s version is %d, print must have ()"%("Python", 3));

2.官网中print的用法
关于更多的新旧版本中print的用法,此处再整理一些官网中的例子以供参考。
(1)末尾不换行
python 2

print x,

python 3

print(x, end=" ")

(2)输出空白行
python 2

print

python 3

print()

(3)重定向输出
python 2

print >>sys.stderr, "fatal error"

python 3

print("fatal error", file=sys.stderr)

(4)打印输出表达式
python 2

print (x, y)

python 3

print((x, y))

至此,读者对于Python 2和Python 3中的print的语法应该比较清楚了。
3. Python 3相比Python 2的其他变化
除了print之外,关于Python从2发展到3后其他的变化,虽然对于初学者来说暂时无需了解如此多的细节,不过为了知识的完整性,以及为今后遇到的问题提供参考,所以还是有必要在此处一并整理出一些大的语法方面的变化。
(1)部分返回值用view和Iterator取代了list
dict的有些方法不再返回list
以前dict的dict.keys()、dict.items()和dict.values()是返回list的,现在变为返回views。比如,以前用:

k = d.keys(); k.sort()

现在改用:

k = sorted(d)

去掉了dict的部分方法
去掉了dict的dict.iterkeys()、dict.iteritems()和dict.itervalues()。
map()和filter()返回迭代器了
range()变成以前的xrange()的效果了
所以去掉了xrange()。
zip()返回迭代器了
(2)带排序的比较
简化了带排序的比较
builtin.sorted()和list.sort()不再支持cmp作为参数,而改用key
取消了cmp()和_?_cmp_?_(),改用_?_lt_?_(),以及用带_?_hash_?_()的_?_eq_?_()实现更加复杂的比较
(3)整型变量
long改名为int
类似于“”这样的表达式返回float变量
去掉了sys.maxint
repr()返回的值不再包含L后缀
八进制数值,不再是0720的形式,而变成0o720
(4)Unicode和8位字节的区别变为文本和数据的区别
从之前的Unicode字符串(unicode)和8位的字符串(str)变为文本(str)和二进制的数据(bytes)。
不能再用u"...",且对于二进制数据用b"..."。
文本字符串和二进制数据之间不再支持混用,需要转换时,可以用对应的str.encode()和bytes.decode(),或者bytes(s, encoding=...)和str(b, encoding=...)。
反斜杠在原始字符串中就是字面意思,没有转义的含义。
举例说明:
1)Python 2.6中ur'\u20ac'表示单个的euro字符;
2)Python 3.0中r'\u20ac'表示对应的一个包含了6个字符的字符串。
去除了内置的抽象类型变量basestring而改用str。
打开文件后返回的是解码后的Unicode字符串,加上b前缀后返回的是字节数组,所以也无需再用之前的codecs模块了。
sys.stdin、sys.stdout和sys.stderr的初始值从io.TextIOBase改为仅支持Unicode字符串,如果想要这些字符流的字节数据,可以使用io.TextIOBase.buffer。
文件名当做参数传递进入和返回时也都是Unicode字符串。
部分系统相关的API,比如os.environ和sys.argv,当系统用默认编码无法解析相关的字节时,可能会存在一些问题。
字符串的repr()不再返回转义后的非ASCII字符,但仍会转义那些控制字符和非打印字符。
默认字符串编码为UTF-8。
非ASCII字符不允许用于标识符。
去掉了StringIO和cStringIO模块,改为先导入io模块后再引用对应的io.StringIO或io.BytesIO。

时间: 2024-10-22 20:20:47

《Python硬件编程实战》——2.2 Python的两大版本的相关文章

《Python硬件编程实战》——导读

前言 笔者是一名有6年嵌入式软件研发经验的工程师,由于工作需要和自己的兴趣,在最近3年的时间开始接触上层软件方面的技术,其中就包括学习和使用Python.越深入地学习,越让笔者觉得Python好用,于是陆续在博客上更新了很多Python的教程和资料,这本书的大多数素材均来自笔者的博客. Python语言从出现到如今已经有很长时间了.市面上关于Python的入门读物更是数不胜数,所以想再写一本入门的好书需要极大的勇气和决心.真正触动笔者下决心写这本书的原因是笔者发现对于很多国内读者,尤其是很多计算

《Python硬件编程实战》——第2章 下载并安装Python 2.1 因Python版本不合适而导致的常见问题

第2章 下载并安装Python 2.1 因Python版本不合适而导致的常见问题 对于下载Python这件事,如果Python没有多种版本,那么只需简单下载一个Python即可.但是实际上由于Python不仅仅有多个不同的版本,而且不同系统环境需要用不同版本的Python,这使得在实际中很多人对"下载一个合适版本的Python"感到无从下手.因此此处需要详细解释一下关于Python版本选择方面的背景知识,并给出对于初学者选择版本的建议,否则很可能会因为最初Python版本选择的不合适而

《Python硬件编程实战》——1.4 Python的应用

1.4 Python的应用 了解了Python是什么以及它的众多特点后,读者很自然地就会想到一个问题:Python能干什么? 而此处普通的这一问句"Python能干什么"的背后其实有着更深层的含义.严格地说至少包含如下三层含义. 1. Python能干什么 从语言本身的层面来说,Python这门编程语言可以实现哪些功能以及不能实现哪些 功能. 2. Python更适合做些什么 作为其中一种编程语言,Python语言根据其语言的特点和优势更适合做哪些事情. 3.你能用Python干什么

《Python硬件编程实战》——1.2 对Python的四种定义

1.2 对Python的四种定义 对于某种计算机语言,根据其特点和语言本身侧重点的不同会有不同的分类和叫法.Python作为计算机语言的其中一种也不例外.接下来就来详细解释Python的各种不同的分类和叫法的详细含义.1.2.1 一种脚本语言 脚本的英文是script.一般的读者看到script这个单词往往首先想到的是电影的剧本,我们大多数人都知道电影剧本其实就是由一段段的脚本所组成的,即电影剧本的脚本决定了电影中的人和物要做哪些事情以及具体怎么做. 与之类似,计算机中的脚本决定了计算机中的操作

《Python硬件编程实战》——2.3 如何选择合适的版本

2.3 如何选择合适的版本 选择合适的Python版本主要包含如下两方面含义: 选择Python 2还是Python 3 选择32位(x86)还是64位(x64) 下面来详细介绍它们的具体含义.2.3.1 选择Python 2还是Python 3 通过前面的介绍,读者已经清楚Python 2和Python 3的区别了.但是作为普通Python使用者来说,到底是选择Python 2还是Python 3呢?在给出笔者的建议之前,此处先总结一下它们各自的优缺点,如表2-1所示. 从表2-1的对比和结论

《Python硬件编程实战》——1.3 Python的特点

1.3 Python的特点 1.3.1 作为脚本语言的优缺点上面已经介绍过,Python是一门脚本语言,也是一门解释型语言.下面就来简单解释一下作为解释型语言的Python有哪些特点.1.作为脚本语言的Python的优点快速开发:不需要编译即可运行 正如前面的解释,写完Python脚本后直接就可以运行而省去编译的步骤,使用起来相对省事和高效.2.作为脚本语言的Python的缺点性能相对不是特别强Python的性能相对一些其他语言(比如C.C++等)来说不是特别强.对于性能要求比较苛刻的某些领域不

《Python硬件编程实战》——1.5 Python的必备常识

1.5 Python的必备常识 有一些和Python相关的常识性的知识,即使是Python初学者也需要先了解清楚.下面就来介绍这些内容.1.5.1 Python文件的后缀 在计算机的世界里,多数文件的类型都是通过文件的后缀来区分的.Python文件的后缀是.py.换句话说,我们见到的Python代码文件的文件名就是类似于xxx.py的.1.5.2 Python的缩写和简称 正是由于Python文件的后缀是.py,所以很多人也常用py来指代Python.比如后文中将会看到的,有些人把Python

《Python硬件编程实战》——2.5 下载合适的Python安装包

2.5 下载合适的Python安装包 在了解了上述软件发布的背景知识后,再来看看Python提供了哪些供读者下载的形式.2.5.1 Python提供了哪些形式 搞懂了上述软件发布的各种格式及含义,此处再来看看Python提供了哪些形式,以及我们需要选择哪种形式下载. 在Python官网中我们可以看到Python提供了很多不同的形式,同时来分析一下我们需要哪种形式. 1.源码形式 作为目前只关注Python软件使用的Python初学者,此处我们暂不关心Python的源代码.不过其中一点需要提示的是

《Python硬件编程实战》——2.4 常见软件的发布格式

2.4 常见软件的发布格式 至此,我们清楚了Python的版本选择:建议初学者选择32位的Python 2且是32位的Python.接下来,很自然所能想到的就是去合适的地方找到所需的版本再去下载即可. 不过在下载之前还要搞清楚一些关于软件发布格式方面的基本概念:在计算机领域内的软件方面,尤其是软件中的开源软件,在一款新的软件发布时往往有多种形式发布出来供用户下载.并且对于这些不同形式的可下载的东西,往往又提供了多种不同的下载源.只有对于这方面的内容有所了解,才能更好地在后续下载Python时明确