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

简介:

本节书摘来自华章计算机《Python硬件编程实战》一书中的第2章,第2.2节,作者:李茂 著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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的版本。

  1. 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函数必须带括号
image

图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的语法应该比较清楚了。

  1. 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。

相关文章
|
4月前
|
人工智能 数据安全/隐私保护 Python
小红书图文生成器,小红书AI图文生成工具,python版本软件
Pillow库自动生成符合平台尺寸要求的配图7;3)利用Playwright实现自动化发布流程6。
|
5月前
|
Ubuntu 安全 API
Python3.14正式支持Free Threaded版本!
Python 社区迎来历史性时刻!Python 3.14 正式将无 GIL 构建列为受支持选项,标志着 Free‑Threaded Phase II 启动。本文将深入解析 PEP 779 规定的支持标准、3.14.0b3 版本的新变化,以及这对Python开发者意味着什么。文末还有小彩蛋哦!
645 87
|
4月前
|
API 数据安全/隐私保护 开发者
企业微信自动加好友软件,导入手机号批量添加微信好友,python版本源码分享
代码展示了企业微信官方API的合规使用方式,包括获取access_token、查询部门列表和创建用户等功能
|
10月前
|
人工智能 Python
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本
349 7
|
PyTorch Linux 算法框架/工具
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
这篇文章是关于如何使用Anaconda进行Python环境管理,包括下载、安装、配置环境变量、创建多版本Python环境、安装PyTorch以及使用Jupyter Notebook的详细指南。
1604 1
pytorch学习一:Anaconda下载、安装、配置环境变量。anaconda创建多版本python环境。安装 pytorch。
|
11月前
|
Ubuntu Shell Linux
pyenv 管理多个 Python 版本(1)
pyenv 管理多个 Python 版本(1)
448 86
pyenv 管理多个 Python 版本(1)
|
11月前
|
Shell Python
使用 pyenv 来管理多个 Python 版本(2)
使用 pyenv 来管理多个 Python 版本(2)
344 71
使用 pyenv 来管理多个 Python 版本(2)
|
10月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
446 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
3682 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
机器学习/深度学习 缓存 PyTorch
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)
这篇文章是关于如何下载、安装和配置Miniconda,以及如何使用Miniconda创建和管理Python环境的详细指南。
4686 0
pytorch学习一(扩展篇):miniconda下载、安装、配置环境变量。miniconda创建多版本python环境。整理常用命令(亲测ok)

推荐镜像

更多