![Python极简讲义:一本书入门数据分析与机器学习](https://wfqqreader-1252317822.image.myqcloud.com/cover/598/30918598/b_30918598.jpg)
1.9 思考与提高
1.Python 2.x和Python 3.x的主要差别在哪里?
【案例分析】
考虑到Python 2.x还被广泛使用,Python社区也提供了部分方案以解决二者的兼容性问题。下面我们列出Python2.x和Python3.x的主要区别。
(1)字符编码方式的差异
Python 3.x中所有字符的编码方式都是unicode。在Python 2.x中,定义unicode字符时需要在字符前面显式加上标识符u,但在Python 3.x中则不需要。针对这种差异,可以在Python 2.x源文件中导入__future__“未来包”,妥善处理二者的兼容性问题,具体如下。
![](https://epubservercos.yuewen.com/4F2DF7/16793577604232306/epubprivate/OEBPS/Images/txt001_59.jpg?sign=1738865193-3uIJcNamsMJjm1z3s3by0gnvm06qr4Cq-0-5a28ea2ed8b387c1b8a7bb7f2b53b412)
导入该包以后,Python 2.x即可使用Python 3.x的未来特性,即在Python 2.x中定义的普通字符将自动识别为unicode字符。
(2)print操作的差异
在早期的Python 2.x中,print是关键字,到了Python 3.x中,print变成了一个函数。事实上,Python 2.6以后也提供了print函数。既然是函数,输出内容就会被当作函数的参数包裹在一对括号之内。而Python 2.x则不需要这对括号。我们可以对比如下代码的差异。
![](https://epubservercos.yuewen.com/4F2DF7/16793577604232306/epubprivate/OEBPS/Images/txt001_60.jpg?sign=1738865193-h49kdbSzotM5PXReQ6etpA2h8fnq4b76-0-7b0818be2f77ba60ce50cd517d32afe7)
为了同时打印输出多个字符串,我们可以导入print_function,用来阻止Python 2.x把它们解释成一个元组(tuple)。
![](https://epubservercos.yuewen.com/4F2DF7/16793577604232306/epubprivate/OEBPS/Images/txt001_61.jpg?sign=1738865193-7VNyGUVqjgqLawUGxiUaVawZ53onzTzJ-0-c9822b757df797aeed563bbd4f968119)
在模块的顶部导入新的函数,可提升兼容性。
![](https://epubservercos.yuewen.com/4F2DF7/16793577604232306/epubprivate/OEBPS/Images/txt001_62.jpg?sign=1738865193-gacQD4bf2XVI3NusCfRIOnOA5wg69sPb-0-ef4094222e5e6c364dc88fbe186099a9)
(3)异常处理上的差异
在Python 3.x中,对异常的处理也做了更新,这个和print处理手法类似,此处不再赘述。
(4)部分模块名和函数名的差异
相比于Python 2.x,Python 3.x中似乎“少”了很多的模块包,其实在大多数情况下,这些包只是改了个名字而已。部分函数名发生了变化,例如存在xrange和range的差异。此外,运算规则也发生了变化,例如在Python 3.x中,5/2的结果是2.5,而不是Python 2.x中的整数2,Python 3.x会把所有整数之间的除法结果换算成一个浮点数(float)。
以上仅仅给出粗略对比,更多具体细节上的差异,请读者自行参考Python 3.x官方文档。
下面给出好用的脚本,通过加载如下脚本,Python 3.x能完美兼容绝大部分通过Python 2.7以上版本编写的代码。
【范例1-3】
![](https://epubservercos.yuewen.com/4F2DF7/16793577604232306/epubprivate/OEBPS/Images/txt001_63.jpg?sign=1738865193-wOVs8RA801SKsszfwDk1Qtqw9J5QgzVv-0-b4654dedc1fc692d5a9df22dad6ad041)
2.如何让Python代码像脚本、命令一样执行?
【案例分析】
有时,我们希望编写的Python代码在命令行直接运行,而不需要显式通过Python解释器来执行。这时我们可以在类UNIX系统下(如macOS或Linux)将.py文件变成一个可执行文件,步骤如下。
首先,声明解释器。我们需要为Python源文件指定解释器,例如在【范例1-3】中,我们在第01行使用“#!/usr/bin/env python”进行声明。
在脚本编程中,第1行以“#!”开头的代码在计算机行业中叫作“shebang”(也称为Hashbang),其作用是指定由哪个解释器来执行脚本。整行代码的含义是,从PATH环境变量中查找Python解释器的位置,然后调用该路径下的解释器来执行脚本。
然后,添加执行权限。在脚本运行前,必须让脚本获得执行权限。
![](https://epubservercos.yuewen.com/4F2DF7/16793577604232306/epubprivate/OEBPS/Images/txt001_64.jpg?sign=1738865193-n6KbLkzAIqosLqUHw9vpWOLkbfMkviLq-0-a7e5444f0c0cda83fb6061405a9dc6cf)
①Linux/UNIX的文件访问权限分为三级:拥有者、群组、其他。利用chmod命令可以更改文件的访问权限。其中,参数“a”表示所有(all),即拥有者、群组、其他三类用户,“+”表示添加权限,“x”表示执行(execute)权限。
②此处“./”表示当前路径,通常不可省略。
3.Jupyter中的常见快捷键有哪些?
【案例分析】
使用快捷键能够显著提高我们的编程效率。Jupyter中的常见快捷键如表1-2所示。
表1-2 Jupyter中的常用快捷键
![](https://epubservercos.yuewen.com/4F2DF7/16793577604232306/epubprivate/OEBPS/Images/txt001_65.jpg?sign=1738865193-5WTlkBe1sYsQnHm843X0zdq9xdCsiGpc-0-4e6293a2fd16f35b7aabc3f79dfb0a42)