Python3与Python2的主要区别

简述:

Python的3,常被称为Python 3000,或简称Py3k。这是一个较大的升级,为了不带入过多的累赘,其在设计的时候没有考虑向下相容。

区别:

print函数print语句 -> print()函数

在Python 2.6与Python 2.7里面,以下三种形式是等价的:print “fish”;print (“fish”);print(“fish”)。
Python 2.6实际已经支持新的print()语法:

from __future__ import print_function
print("fish", "panda", sep=', ')
Unicode -> 编码

Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。
Python 3,有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。
Python3 默认使用utf-8编码,效果如下:

# python3:
>>> 中国 = 'china' 
>>> print(中国)
china
>>> str = "我爱北京天安门"
>>> str
'我爱北京天安门'

# Python 2.x
>>> 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'
除法运算

Python中的除法较其它语言显得非常高端,有套很复杂的规则。
python2 除法类似Java、C,整数相除结果是一个整数(舍弃小数部分),浮点数相除得到一个浮点数。
python3 整数之间的相除,得到的都是浮点数。

except

Python3 中使用 as 作为关键词。捕获异常的语法由 except exc, var 改为 except exc as var。
使用语法except (exc1, exc2) as var 可以同时捕获多种类别的异常。

  1. Python2,所有类型的对象都可以被直接抛出;Python3,只有继承自BaseException的对象才可以被抛出。
  2. Python2,raise语句使用逗号将抛出对象类型和参数分开;Python3,直接调用构造函数抛出对象即可。
  3. Python2,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情;Python3,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。
xrange -> range

Python2,xrange() 创建迭代对象。比如: for 循环或者是列表/集合/字典推导式,这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。因为生成器每次都从头开始,不建议你重复迭代多次。
Python3,range() 取代

八进制字面量表示

八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。新增了一个bin()函数用于将一个整数转换成二进制字串。

!= 和 <> 统一为 !=

Python2 不等于有两种写法 != 和 <>
Python3 去掉了<>, 只有!=一种写法

去掉了repr表达式

Python2 反引号 `` 相当于repr函数的作用
Python3 去掉了 `` 这种写法,只允许使用repr函数

多个模块被改名

根据PEP8,旧的名字新的名字-

old new
_winreg winreg
ConfigParser configparser
copy_reg copyreg
Queue queue
SocketServer socketserver
repr reprlib

StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。
httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包内。
取消了exec语句,只剩下exec()函数。

数据类型

Python3 去除了long类型,只有一种整型int,但它的行为就像python2的long
python3 新增了bytes类型,对应于2.X版本的八位串,定义一个bytes字面量的方法如下:

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

python3 的dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有 dict.has_key(),用 in替代它 。

打开文件 和 输入:

打开文件:原:file( … ) 或 open(…) -> 只能用 open(…)
键盘录入字符串:原: raw_input( “提示信息” ) -> input( “提示信息” )

python2 中 raw_input() 将所有输入视为字符串,返回str; input()只能接收"数字",返回int/float。
python3 中整合为input()函数,接收任意输入都视为字符串,返回str。

map、filter 和 reduce

这三个函数是函数式编程的代表。
Python2 map 和 filter 类型是 built-in function, 输出的结果都是列表
Python3 map 和 filter 从函数变成了类,返回结果为可迭代的对象
reduce 函数,在 Python3 已经不属于 built-in,被挪到 functools 模块当中

你可能感兴趣的:(Python)