Python2和Python3
- 背景
自2020年1月1日起,Python 2将不再得到支持。Python的核心开发人员将不再提供错误修复版或安全更新。
因此我们不得不思考:Python2的停止维护会造成哪些影响?是否需要把当前的开发项目从Python2移植到Python3?
而我们组内的大数据基础平台项目正是使用Python2.7版本进行开发的,Python2停止维护对该项目会有哪些影响呢?
- Python2停止维护造成的影响
- 如果继续使用未得到支持的模块,遇到漏洞无人修复。
- 越来越多的Python项目在2020年1月1日前放弃Python2,包括pandas、Zulip、IPython、NumPy 、Requests和TensorFlow等等。如果你继续使用Python2,你将无法使用这些模块的新功能。
- 如果你在维护其他开发人员依赖的库,可能会阻止他们更新到Python3。
- Python2(2.7)和Python3(3.6)的不同
1.Python2中 print 是声明语句,而Python3中变成了print()函数;
Python2:
Python3:
2.Python2中支持运算符<> 和 != ,而Python3中仅支持 !=;
Python2:
Python3:
3.Python2 的默认编码是ASCII,Python3的默认编码是UTF-8。所以使用Python3是不会存在中文乱码的问题;
4.通过input()解析用户输入:
my_input = input('enter a number: ')
Python2得到的my_input的类型为int
Python3得到的my_input的类型为str
5.Python2的除法中不是浮点数则只返回商,Python3除法返回值正常。
Python2:
Python3:
6.Python2与Python3捕获异常的不同;
Python2:
try: 1/0 except ZeroDivisionError, e: print str(e) |
Python3(此种方式python 2.x也可用,python 3.x必须带as):
try: 1/0 except ZeroDivisionError as e: print str(e) |
7.Python2中range()直接生成列表(量大占内存死机),Python3中只有range()和Python2中的xrange()都只生成一个迭代器(一个计算方法,不占内存)。
8.重用父类属性的super()使用方法不同,Python2中super()需要输入本身类名和自身作为参数,而Python3中不用输入参数,可以直接使用替代上一级父类。
9.创建类时,Python2分为经典类和新式类,新式类就是继承object的类,经典类是没有继承的类,而Python3中全部是新式类,默认继承object。在属性查找时,经典类查找方式为深度优先,新式类是广度优先。仅Python3中有类的mro函数方法,输出继承父类的顺序列表。
10.filter、map、reduce的不同
Python2:
这三个函数属于内置函数,并且返回的结果为列表。
Python3:
由内置函数变成了类,且返回值变成可一个可迭代对象。
11.Python3新增byte数据类型
str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。
12.Python3的dict的.keys()、.items 和.values()方法返回迭代器,而Python2的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),取而代之的是关键字in。
- Python多版本共存
1、Python3安装
下载安装包:
wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz |
解压缩安装包到 /usr/local/ 目录下
|
安装依赖的组件
yum install gcc yum install openssl-devel |
编译
cd
make && make install |
2、Python多版本之间的切换
创建软链接(相当于创建了快捷方式)
|
进入 /usr/bin 查看安装了哪些版本的Python
执行指令python2 或 python3 来选择对应版本的Python。