深入浅析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 相关文章推荐
Python中title()方法的使用简介
May 20 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
Python中list初始化方法示例
Sep 18 Python
Python实现将16进制字符串转化为ascii字符的方法分析
Jul 21 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
对numpy中array和asarray的区别详解
Apr 17 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
May 30 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
Pytorch maxpool的ceil_mode用法
Feb 18 Python
python中pathlib模块的基本用法与总结
Aug 17 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
如何在PHP中使用Oracle数据库(5)
2006/10/09 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
jquery ajax请求实例深入解析
2012/11/26 Javascript
js中传递特殊字符(+,&amp;)的方法
2014/01/16 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
以v-model与promise两种方式实现vue弹窗组件
2018/05/21 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
Python 里最强的地图绘制神器
2021/03/01 Python
canvas压缩图片以及卡片制作的方法示例
2018/12/04 HTML / CSS
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
Pretty You London官网:英国拖鞋和睡衣品牌
2019/05/08 全球购物
个人简历自我评价范文
2014/02/04 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
领导干部作风建设自查报告
2014/10/23 职场文书
施工安全保证书
2015/05/09 职场文书
开业庆典致辞
2015/08/01 职场文书
会计主管竞聘书
2015/09/15 职场文书