python2 python3区别
Python开发团队将在2020年1月1日停止对Python2.7的技术支持,但python2的库仍然比较强大(在 pip 官方下载源 pypi 搜索 Python2.7 和 Python3.5 的第三方工具包数可以发现,Python2.7版本对应的第三方工具类目数量是 28523,Python3.5 版本的数量是 12457,这两个版本在第三方工具包支持数量差距相当大 ),因此这里做区别的梳理与介绍:
1实践:
(1)检查python2代码是否可以被Python3编译通过的命令: python3 -m py_compile FILENAME
2理论:
(1)Python3 对 Unicode 字符的原生支持。
Python2 中使用 ASCII 码作为默认编码方式导致 string 有两种类型 str 和 unicode,Python3 只支持 unicode 的 string。
|
Python2 |
Python3 |
|
str类型为非unicode字符串 unicode类型为unicode字符串 |
只有str类型,取消unicode类型 |
|
str和unicode类型继承于basestring |
无basestring类型,str继承于object |
|
不区分str和bytes,两者等价, python2中的str相当于python3中的bytes |
严格区分bytes和str,不允许bytes和str类型的隐式转换 |
Python3严格区分bytes和str,打开二进制文件时一定要指定二进制打开模式 open(FILENAME, "rb")
(2)Python3修改了一些标准模块的名字,按照PEP8的规范,所有module的名字不含大写字母
|
Python2 |
Python3 |
Python2 |
Python3 |
Python2 |
||
|
__builtin__ |
builtins |
dummy_thread |
_dummy_thread |
Tix |
||
|
_winreg |
winreg |
FileDialog |
tkinter.filedialog |
tkColorChooser |
||
|
anydbm |
dbm |
gdbm |
dbm.gnu |
tkCommonDialog |
||
|
BaseHTTPServer |
http.server |
htmlentitydefs |
html.entities |
Tkconstants |
||
|
CGIHTTPServer |
http.server |
HTMLParser |
html.parser |
Tkdnd |
||
|
commands |
subprocess |
httplib |
http.client |
tkFileDialog |
||
|
ConfigParser |
configparser |
markupbase |
_markupbase |
tkFont |
||
|
Cookie |
http.cookies |
Queue |
queue |
Tkinter |
||
|
cookielib |
http.cookiejar |
repr |
reprlib |
tkMessageBox |
||
|
copy_reg |
copyreg |
robotparser |
urllib.robotparser |
tkSimpleDialog |
||
|
cPickle |
pickle |
ScrolledText |
tkinter.scrolledtext |
ttk |
||
|
cStringIO |
io |
SimpleDialog |
tkinter.simpledialog |
urlparse |
||
|
dbhash |
dbm.bsd |
SimpleHTTPServer |
http.server |
UserList |
||
|
dbm |
dbm.ndbm |
SimpleXMLRPCServer |
xmlrpc.server |
UserString |
||
|
Dialog |
tkinter.dialog |
SocketServer |
socketserver |
whichdb |
||
|
DocXMLRPCServer |
xmlrpc.server |
StringIO |
io |
xmlrpclib |
||
|
dumbdbm |
dbm.dumb |
thread |
_thread |
(3)Python3 采用的是绝对路径的方式进行 import ,Python2 中存在老式类和新式类的区别,Python3 统一采用新式类。新式类声明要求继承 object,必须用新式类应用多重继承。
Python3 使用更加严格的缩进。Python2 的缩进机制中,1 个 tab 和 8 个 space 是等价的,所以在缩进中可以同时允许 tab 和 space 在代码中共存。这种等价机制会导致部分 IDE 使用存在问题。Python3 中 1 个 tab 只能找另外一个 tab 替代,因此 tab 和 space 共存会导致报错:TabError:inconsistent use of tabs and spaces in indentation.
|
Python2 |
Python3 |
|
编译时认为8空格等价于1个Tab |
严格缩进,Tab必须和Tab匹配,空格必须和空格匹配 |
(4)
1.print 语句被 Python3 废弃,统一使用 print 函数
2. exec 语句被 python3 废弃,统一使用 exec 函数
3. execfile 语句被 Python3 废弃,推荐使用 exec(open("./filename").read())
4. 不相等操作符"<>"被 Python3 废弃,统一使用"!="
5. long 整数类型被 Python3 废弃,统一使用 int
6. xrange 函数被 Python3 废弃,统一使用 range,Python3 中 range 的机制也进行修改并提高了大数据集生成效率
7. Python3 中这些方法再不再返回 list 对象:dictionary 关联的 keys()、values()、items(),zip(),map(),filter(),但是可以通过 list 强行转换。
8. 迭代器 iterator 的 next()函数被 Python3 废弃,统一使用 next(iterator)
9. raw_input 函数被 Python3 废弃,统一使用 input 函数
10. 字典变量的 has_key 函数被 Python 废弃,统一使用 in 关键词
11. file 函数被 Python3 废弃,统一使用 open 来处理文件,可以通过 io.IOBase 检查文件类型
12. apply 函数被 Python3 废弃
13. 异常 StandardError 被 Python3 废弃,统一使用 Exception
(5)Python2,round 函数返回 float 类型值 ;Python3,round 函数返回 int 类型值
(6)迭代器
|
Python2 |
Python3 |
|
xrange返回迭代器 |
无此函数 |
|
range返回列表 |
range返回迭代器 |
|
map返回列表 |
map返回迭代器 |
|
filter返回列表 |
filter返回迭代器 |
|
zip返回列表 |
zip返回迭代器 |
|
imap/ifilter/izip 返回迭代器 |
这些函数不存在 |
- python3下找不到xrange函数
- 变量类型由列表变为迭代器所导致的问题
建议兼容写法:
- 不使用xrange,一律使用range
- 当需要把range/map/filter/zip的值赋给一个变量,或者作为函数的返回值时,建议使用list()转换为列表
python2 python3区别的更多相关文章
- python2 python3区别(续)
1.除法 Python2 Python3 int/int → int int/int → float python2下整数除以整数返回整数类型,python3下整数除以整数返回浮点数类型 当某些语句假 ...
- Python之路Python3【第零篇】Python2 & Python3区别持续更新~
print def print(self, *args, sep=' ', end='\n', file=None): # known special case of print "&quo ...
- 1. Python2 ,Python3区别
Python2: 1. 源码都含有PHP,Java,C等语言的规范陋习. 2.重复代码比较多. Python3: 源码很规范,清晰,简单,符合Python的宗旨.
- python学习日记(python2/3区别补充,is / id/ encode str,bytes)
python2和python3区别 print python2中,print 是语句 :用法 ---->print '***' python3中,print 是函数:用法----->pri ...
- 同时安装 Python2 & Python3 cmd下版本自由选择
系统:win7 python2.7,python3.6同时安装,于是问题来了,python27与python36文件夹下的文件名都是python.exe 这样在cmd下,直接输入python,自动执行 ...
- python2&python3
1.Python3 使用 print 必须要以小括号包裹打印内容,比如 print('hi') Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print 'hi ...
- Ubuntu安装Python2+Python3
sudo apt-get install python2.7 python2.7-dev sudo apt-get install python3 命令: python 默认执行python2 pyt ...
- Ubuntu16.04 下python2 | python3
在终端分别输入python,python2,python3 python和python2默认都是python2 python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 s ...
- windows和linux下 Python2,Python3 的环境及安装
目录 windows和linux下 Python2,Python3 的环境及安装 window下安装 一. 手动安装 二. pip安装 linux下 安装 更新Python 笔者有话 windows和 ...
随机推荐
- windows操作系统python selenium webdriver安装
这几天想搞一个爬虫,就来学习一下selenium,在网上遇见各种坑,特写一篇博文分享一下selenium webdriver的安装过程. 一.安装selenium包 pip install selen ...
- 使用pycharm 出现 interpreter field is empty 完美解决方法(转载 记录)
使用pycharm 出现 interpreter field is empty 主要是因为你的电脑没有正确安装python或者安装python出错,重新下载安装覆盖就行 下载安装包:从Python的官 ...
- AS报:Manifest merger failed with multiple errors, see logs
* What went wrong:Execution failed for task ':app:processDebugManifest'. Manifest merger failed with ...
- Java跨平台的原理
使用Java语言编写应用程序最大的优点在于“一次编译,处处运行”,然而这并不是说所有的Java程序都具有Java跨平台的特性, 事实上,相当一部分的Java程序是不能在别的操作系统上正确运行的. Ja ...
- tomcat启动慢
securerandom.source=file:/dev/./urandom 搜索 /""
- project4 安卓
[MongoDB的密码] 用户名dbUser 密码dbUserPassword00 dbUser:dbUserPassword00 [概念] POM的配置要严格按照网页指示给出的标签顺序来. 安卓AP ...
- java虚拟机和内存优化总结
前一段时间总结了spring和springmvc相关的知识,面试中常问到的除了这些基本的框架之外,还有底层的基础知识,比如与java虚拟机相关的知识点,这一部分也是面试中经常问到的,在面试中高级jav ...
- WCF 服务的集合管理器的设计
今天是2019年2月1日,时间过得针对,马上就年底了,当前新年也离我们越来越近了.在此,我也祝福经常浏览我博客的朋友们“新年快乐.阖家欢乐”,来年有一个好彩头.在即将结束这一年之计,写今年的最后一片文 ...
- 响应式web设计(一)
很多网页都是基于网格设计的,这说明网页是按列来布局的. 原理就是讲网页分成十二列,每列的宽度是8.33%,元素的宽度,用几列来定义,正是因为这一点,才可以做到响应,就是随着窗口宽度的变化,给元素分配不 ...
- Hbase的基本操作(CDH组件可用)
Habse创建一张表: 1,创建一个命名空间NameSpace(命名空间NameSpace指的是一个表的逻辑分组 ,同一分组中的各个表有类似的用途,相当于关系型数据库中的DataBase) ...