深入浅析Python2.x和3.x版本的主要区别


Posted in Python onNovember 30, 2018

版本说明

Python 3.0在设计的时候没有考虑向较早版本相容

Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。
 

除非为了使用旧的Python2.x项目代码或只支持2.x的第三方库,否则不推荐使用2.x进行编程

死人的print函数

Python 2.6与Python 2.7里面,以下三种形式是等价的:

print "fish"
print ("fish") #注意print后面有个空格
print("fish") #print()不能带有任何其它参数

但python3.x只能使用后两者,print语句被python3废弃,只能使用print函数

Unicode

Python3中字符串是Unicode (utf-8)编码,支持中文做标识符。

python2中是ASCII编码,需要更改字符集才能正常支持中文,所以在.py文件中会看到#-- coding: UTF-8 --。

#python3中
>>> 中国 = 'china' 
>>>print(中国) 
china
#python2中
>>> str = "我爱北京天安门"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我爱北京天安门"
>>> str
u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'

除法运算

单斜杠/,Python2中整数相除得整数,浮点小数相除得浮点;Python3中结果总是浮点数。

#python3
>>print(10/5)
2.0

双斜杠//,Python2和3相同,都是除法结果去掉小数部分

>>print(10//3)
3

异常处理

Python2中try:...except ERR,e:...,在Python3中改为了try:...except ERR as e:...
#Python3
try:
 open('a.txt','r')
except Exception as e:
 print(e) #这里也不要使用e.message

python 2中触发异常可以用raise IOError, "file error"或raise IOError("file error")两种方式。

python 3中触发异常只能用raise IOError("file error")。 

 异常StandardError 被Python3废弃,统一使用Exception

xrange和range

Python3中不再使用xrange方法,只有range方法

range在Python2中返回列表,而在Python3中返回range可迭代对象

a=range(10)
print(a)
print(list(a))

输出

range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

八进制字面量

Python3中只能使用0o...格式,对于01000格式将抛出错误,而在Python2中两种都能使用

>>> 01000
 File "<stdin>", line 1
 01000
  ^
SyntaxError: invalid token
>>> 0o1000
512

不等运算符

在Python2中有两个不等运算符!=和<>,在Python3中去掉了<>,只有!=符号表示不等。

repr

在Python2中双反引号``可以替代repr函数,在Python3中去掉了双反引号的表是方法,只能用repr方法

模块改名

StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
 取消了exec语句,只剩下exec()函数。

long类型

在Python2中long是比int取值范围更大的整数,Python3中取消了long类型,int的取值范围扩大到之前的long类型范围

bytes类型

Python3新增了bytes类型,使用b开头的字符串定义:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'>

str对象和bytes对象可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互转化。

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode() 
>>> b1 
b'china'

dict类型

Python3中dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。

 同时去掉的还有 dict.has_key(),可以用in来代替。

di={
 'a':1,
 'b':2,
 'c':3
}
for item in d.items():
 print(item)
print('c' in di)

输出

('gggg', {'a1': 1})
('b', 12)
True

next()函数和.next()方法

my_generator = (letter for letter in 'abcdefg')
 python 2中可以用 next(my_generator) 和 my_generator.next() 两种方式。
python 3中只能用 next(my_generator)这种方式。

列表推导

不再支持[n for n in a,b]语法,改为[n for n in (a,b)]或[n for n in [a,b]]

a=1
b=2
c=[n for n in [a,b]]
print(c)

输出[1,2]

input

python 2 中通过input 输入的类型是 int,只有通过 raw_input()输入的类型才是str.
 python 3中通过input输入的类型都是是str,去掉了row_input()方法。

比较符

Python 2 中任意两个对象都可以比较,11 < 'test'返回True
 Python 3中只有同一数据类型的对象可以比较,11 < 'test'报错,需要调用正则判断,改为import re;11 < int('test') if re.compile('^[0-9]+$').match('test') else 0否则就报错

其他

exec语句被python3废弃,统一使用exec函数

execfile语句被Python3废弃,推荐使用exec(open("./filename").read())

Python3中这些方法不再返回list对象:dictionary关联的keys()、values()、items(),zip(),map(),filter(),但是可以通过list强行转换

迭代器iterator的next()函数被Python3废弃,统一使用next(iterator)

file函数被Python3废弃,统一使用open来处理文件,可以通过io.IOBase检查文件类型

apply函数被Python3废弃

总结

以上所述是小编给大家介绍的Python2.x和3.x版本的主要区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法
May 22 Python
Python实现PS滤镜功能之波浪特效示例
Jan 26 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
Feb 21 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
Aug 01 Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
Jul 30 Python
python elasticsearch环境搭建详解
Sep 02 Python
python生成requirements.txt的两种方法
Sep 18 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
python中return如何写
Jun 18 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
python实现图片识别汽车功能
Nov 30 #Python
解决pycharm运行出错,代码正确结果不显示的问题
Nov 30 #Python
python实现汽车管理系统
Nov 30 #Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 #Python
Python版名片管理系统
Nov 30 #Python
Python unittest 简单实现参数化的方法
Nov 30 #Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 #Python
You might like
11个PHP 分页脚本推荐
2011/08/15 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
2014/06/26 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
php轻松实现文件上传功能
2016/03/03 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
javascript编程异常处理实例小结
2015/11/30 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
Vue.js 2.0 移动端拍照压缩图片上传预览功能
2017/03/06 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
python获取栅格点和面值的实现
2020/03/10 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
经典促销广告词大全
2014/03/19 职场文书
医德考评自我评价
2014/09/14 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL