python之python2与python3的差异

1.核心类差异

  1. Python3 对 unicode 字符的原生支持。
    Python2 中使用 ASCII 码作为默认编码方式导致 string 有两种类型 str 和 unicode ,Python 3 只支持 unicode 的string。Python2 和 Python3 字节和字符对应关系为:
    在这里插入图片描述
    关于编码区别的详细讲解参考:
  2. Python3 采用的是绝对路径的方式进行 import。
    Python2中相对路径的import会导致标准库导入变得困难(想象一下,同一目录下如果有与标准库同名的.py文件)
  3. Python2中类分为经典类和新式类,Python3 统一采用新式类。新式类声明要求继承基类Object。必须用新式类用于多重继承。
  4. Python3的缩进更为严格。Python2缩进中允许 tab 和 space 在代码中共存,1个 tab 等价于 8个 space 。而 Python3缩进中不允许 tab 和 space共存。

2. 废弃类差异

  1. print 语句被 Python3 废弃,统一使用 print函数。
  2. exec 语句被 Python3 废弃,统一使用 exec 函数。
  3. execfile 语句被 Python3 废弃,推荐使用 exec(open(’’./filename").read())。
  4. 不相等操作符"< >" 废弃,统一使用 “!=”。
  5. long 整数类型被 Python3 废弃,统一使用 int。
  6. xrange 函数被 Python3 废弃,统一使用range,Python3中的range函数也进行了修改提高(具有 Python2中 xrange 函数性能)。
  7. dictionary 关联的 keys(),values(),items(); zip(),map(),filter(),这些方法不再返回list对象,但是可以通过list()方法转换成列表。
  8. 迭代器 iterator 中的 next() 函数被 Python3 废弃,统一使用 next(iterator)。
  9. raw_input函数被Python3废弃,统一使用input函数。
  10. 字典变量中的 has_key 函数被 Python3 废弃,统一使用 in 关键词。
  11. file函数被 Python3 废弃,统一使用 open 来处理文件。
  12. apply 函数被 Python3 废弃。
  13. 异常 StandardError 被 Python3 废弃,统一使用 Exception

3.修改类差异

'''
1. 浮点数整除法操作符 "/" 和 "//"
"/":
Python2: 依据参加运算的数据类型而定,若为两个整数运算,结果为整数,若含浮点数进行运算,结果为浮点数;
Python3:真除法,依据最终结果而定数据类型;

"//":
Python2 和 Python3 运算结果无异,都是返回小于运算结果的最大整数;

'''
  1. 异常抛出和捕捉异常机制区别
    Python2:
raise IOError,"file error" #抛出异常
except NameError,err  #捕捉异常

Python3

raise IOError("file error") #抛出异常
except NameError as err #捕捉异常
  1. for 循环中变量值的区别
    Python2中, for 循环会修改外部相同名称变量的值
>>> i = 1
>>> print('test:',[i for i in range(5)])
('test:', [0, 1, 2, 3, 4])
>>> print(i)
4

Python3中, for 循环不会修改外部相同名称变量的值

>>> i = 1
>>> print('test:',[i for i in range(5)])
test: [0, 1, 2, 3, 4]
>>> print(i)
1
  1. round 函数返回值区别
    Python2中,round函数返回float类型值
>>> type(round(15.5))
<type 'float'>

Python3中,round函数返回int类型值

>>> type(round(15.5))
<class 'int'>
  1. 比较操作符的区别
    Python2中任意两个对象都可以比较(最终是比较对应的ASCII码)
    Python3中只有同一数据类型可以比较

4.第三方工具包差异(了解)

我们在 pip 官方下载源 pypi 搜索 Python2.7 和 Python3.5 的第三方工具包数可以发现,Python2.7版本对应的第三方工具类目数量是 28523,Python3.5 版本的数量是 12457(数量会增加变化的,我们知道数量上会有差异就行)这两个版本在第三方工具包支持数量差距相当大,并且支持情况也会有差异。(不做列举,了解即可)

5.工具安装问题(了解)

windows 环境
Python2 无法安装 mysqlclient。Python3 无法安装 MySQL-python、 flup、functools32、
Gooey、Pywin32、 webencodings。
matplotlib 在 python3 环境中安装报错:The following required packages can not be
built:freetype, png。需要手动下载安装源码包安装解决。
scipy 在 Python3 环境中安装报错,numpy.distutils.system_info.NotFoundError,需要自己手
工下载对应的安装包,依赖 numpy,pandas 必须严格根据 python 版本、操作系统、64 位与否。运行
matplotlib 后发现基础包 numpy+mkl 安装失败,需要自己下载,国内暂无下载源
centos 环境下
Python2 无法安装 mysql-python 和 mysqlclient 包,报错:EnvironmentError: mysql_config not
found,解决方案是安装 mysql-devel 包解决。使用 matplotlib 报错:no module named _tkinter,
安装 Tkinter、tk-devel、tc-devel 解决。
pywin32 也无法在 centos 环境下安装。

注: 面试回答该问题的时候主要是把核心类差异的尽可能全部阐述出来,然后废弃类和修改类根据个人情况选择性尽可能多答些,工具和安装类了解即可,可不提。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值