Python的3,常被称为Python 3000,或简称Py3k。这是一个较大的升级,为了不带入过多的累赘,其在设计的时候没有考虑向下相容。
在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=', ')
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 整数之间的相除,得到的都是浮点数。
Python3 中使用 as 作为关键词。捕获异常的语法由 except exc, var 改为 except exc as var。
使用语法except (exc1, exc2) as var 可以同时捕获多种类别的异常。
Python2,xrange() 创建迭代对象。比如: for 循环或者是列表/集合/字典推导式,这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。因为生成器每次都从头开始,不建议你重复迭代多次。
Python3,range() 取代
八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。新增了一个bin()函数用于将一个整数转换成二进制字串。
Python2 不等于有两种写法 != 和 <>
Python3 去掉了<>, 只有!=一种写法
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。
这三个函数是函数式编程的代表。
Python2 map 和 filter 类型是 built-in function, 输出的结果都是列表
Python3 map 和 filter 从函数变成了类,返回结果为可迭代的对象
reduce 函数,在 Python3 已经不属于 built-in,被挪到 functools 模块当中