python3.0与2.x之间的区别: 
1.性能 
Py3.0运行pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。 
2.编码 
Py3.0源码文件默认使用utf-8编码,这就使得以下代码是合法的: 
>>>中国 = 'china' 
>>> print(中国) 
china 
3.语法 
1)去除了<>,全部改用!= 
2)去除``,全部改用repr() 
3)关键词加入as和with,还有True,False,None 
4)整型除法返回浮点数,要得到整型结果,请使用// 
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量 
6)去除print语句,加入print()函数实现相同的功能。同样的还有exec语句,已经改为exec()函数 
1 print语句被print()函数取代了,可以使用关键字参数来替代老的print特殊语法。例如: 
Old: print "The answer is", 2*2 
2 New: print("The answer is", 2*2) 
3 Old: print x,                                      # 使用逗号结尾禁止换行 
4 New: print(x, end=" ")                   # 使用空格代替换行 
5 Old: print                                         # 输出新行 
6 New: print()                                  # 输出新行 
7 Old: print >>sys.stderr, "fatal error" 
8 New: print("fatal error", file=sys.stderr) 
9 Old: print (x, y)                            # 输出repr((x, y)) 
10 New: print((x, y))                         # 不同于print(x, y)! 
7)改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的bool值  
8)输入函数改变了: 
Old: 
guess = int(raw_input('Enter an integer : ')) #读取键盘输入的方法 
New: 
guess = int(input('Enter an integer : ')) 
9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了 
10)新式的8进制字变量,相应地修改了oct()函数。2.x的方式如下: 
>>> 0666 
438 
>>> oct(438) 
'0666' 
3.0这样: 
>>> 0666 
SyntaxError: invalid token (<pyshell#63>, line 1) 
>>> 0o666 
438 
>>> oct(438) 
'0o666' 
11)增加了2进制字面量和bin()函数 
>>> bin(438) 
'0b110110110' 
>>> _438 = '0b110110110' 
>>> _438 
'0b110110110' 
12)扩展的可迭代解包。在Py3.0里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list对象和seq是可迭代的。 
13)新的super(),可以不再给super()传参数, 
>>> class C(object): 
   def __init__(self, a): 
         print('C', a) 
>>> class D(C): 
   def __init(self, a): 
         super().__init__(a) #无参数调用super() 
>>> D(8) 
C 8 
<__main__.D object at 0x00D7ED90> 
14)新的metaclass语法: 
class Foo(*bases, **kwds): 
   pass 
15)支持class decorator。用法与函数decorator一样: 
>>> def foo(cls_a): 
   def print_func(self): 
         print('Hello, world!') 
   cls_a.print = print_func 
   return cls_a 
>>> @foo 
class C(object): 
   pass 
>>> C().print() 
Hello, world! 
4.字符串和字节串 
1)现在字符串只有str一种类型,但它跟2.x版本的unicode几乎一样。 
2)关于字节串,请参阅“数据类型”的第2条目 
5.数据类型 
1)Py3.0去除了long类型,现在只有一种整型——int,但它的行为就像2.x版本的long 
2)新增了bytes类型,对应于2.x版本的八位串,定义一个bytes字面量的方法如下: 
>>> 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' 
3)dict的.keys()、.items和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有dict.has_key(),用in替代它吧 
6.面向对象 
1)引入抽象基类(Abstraact Base Classes,ABCs)。 
2)容器类和迭代器类被ABCs化,所以cellections模块里的类型比Py2.5多了很多。 
>>> import collections 
>>> print('\n'.join(dir(collections))) 
Callable 
Container 
Hashable 
ItemsView 
Iterable 
Iterator 
KeysView 
Mapping 
MappingView 
MutableMapping 
MutableSequence 
MutableSet 
NamedTuple 
Sequence 
Set 
Sized 
ValuesView 
__all__ 
__builtins__ 
__doc__ 
__file__ 
__name__ 
_abcoll 
_itemgetter 
_sys 
defaultdict 
deque 
另外,数值类型也被ABCs化。 
3)迭代器的next()方法改名为__next__(),并增加内置函数next(),用以调用迭代器的__next__()方法 
4)增加了@abstractmethod和 @abstractproperty两个decorator,编写抽象方法(属性)更加方便。 
7.异常 
1) 所以异常都从BaseException继承,并删除了StardardError 
2) 去除了异常类的序列行为和.message属性 
3) 用raise Exception(args)代替 raise Exception, args语法 
4) 捕获异常的语法改变,引入了as关键字来标识异常实例,在Py2.5中: 
>>> try: 
... raise NotImplementedError('Error') 
... except NotImplementedError, error: 
... print error.message 
... 
Error 
在Py3.0中: 
>>> try: 
   raise NotImplementedError('Error') 
except NotImplementedError as error: #注意这个 as 
   print(str(error)) 
Error 
5) 异常链,因为__context__在3.0a1版本中还没有实现,这方面就不说了 
8.模块变动 
? 移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。 
? 移除了imageop模块 
? 移除了audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块 
? 移除了bsddb模块(单独发布,可以从http://www.jcea.es/programacion/pybsddb.htm获取) 
? 移除了new模块 
? os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下 
? tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是tokenize.tokenize() 
9.其它 
1)xrange()改名为range(),要想使用range()获得一个list,必须显式调用: 
>>> list(range(10)) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
2)bytes对象不能hash,也不支持b.lower()、b.strip()和b.split()方法,但对于后两者可以使用b.strip(b’ \n\t\r\f’)和b.split(b’ ‘)来达到相同目的 
3)zip()、map()和filter()都返回迭代器。而apply()、callable()、coerce()、execfile()、reduce()和reload()函数都被去除了 
4)string.letters和相关的.lowercase和.uppercase被去除,请改用string.ascii_letters等 
5)如果x < y的不能比较,抛出TypeError异常。2.x版本是返回伪随机布尔值的 
6)__getslice__系列成员被废弃。a[i:j]根据上下文转换为a.__getitem__(slice(I, j))或__setitem__和__delitem__调用 
7)file类被废弃,在Py2.5中: 
>>> file 
<type 'file'> 
在Py3.0中: 
>>> file 
Traceback (most recent call last): 
File "<pyshell#120>", line 1, in <module> 
file 
NameError: name 'file' is not defined

【转载】python3.0与2.x之间的区别的更多相关文章

  1. python3.0与2.x之间的区别

    python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好 ...

  2. 【和我一起学Python吧】Python3.0与2.X版本的区别

    做为一个前端开发的码农,却正在阅读最新版的<A byte of Python>.发现Python3.0在某些地方还是有些改变的.准备慢慢的体会,与老版本的<A byte of Pyt ...

  3. thinkphp5.0与thinkphp3.2之间的区别

    5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别. URL和路由 5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规 ...

  4. Python3列表、元组及之间的区别和转换

    文章目录 1. 列表(list) 1.1 列表创建.切片.删除.检索 1.2 列表常用函数 2. 元组(tuple) 3. 列表与元组区别及转换 1. 列表(list) 1.1 列表创建.切片.删除. ...

  5. HTML4.01和XHTML1.0和XHTML1.1的一些区别

    接触web前端以来,一直使用的都是html5,因此一直没搞明白HTML4.01和XHTML1.0和XHTML1.1之间的区别,今天在看<精通CSS>一书,有简单介绍这几个,在这儿记录下. ...

  6. Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth

    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1 Python 3_x 新特性1 python3.4新特性1 python3.5新特性1 值得关注的新特性1 ...

  7. 相比于python2.6,python3.0的新特性。

    这篇文章主要介绍了相比于python2.6,python3.0的新特性.更详细的介绍请参见python3.0的文档. Common Stumbling Blocks 本段简单的列出容易使人出错的变动. ...

  8. TCP/IP和UDP之间的区别(转载)

    在分析两者之间的区别之前,我们先搞清楚这两者的关系, TCP/IP协议簇  是一种网络控制协议,简单点说就是一种网络协议,我们网络中的计算机就是通过这套协议簇来进行数据通信的.这套协议簇里面包含了很多 ...

  9. 【转】python3中bytes和string之间的互相转换

    问题: 比对算法测试脚本在python2.7上跑的没问题,在python3上报错,将base64转码之后的串打印出来发现,2.7版本和3是不一样的:2.7就是字符串类型的,但是3是bytes类型的,形 ...

随机推荐

  1. JAVA基础学习之命令行方式、配置环境变量、进制的基本转换、排序法、JAVA文档生成等(1)

    1.命令行方式 dos命令行,常见的命令: dir:列出当前目录下的文件以及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd..:退回到上一级目录 cd/:退回到根目录 del:删除文 ...

  2. SQL Server 2000 ——系统表和系统视图

    一.系统表 数据字典的详细信息请查SQL SERVER BOL,这里仅列出一部分. 1.1.sysservers 1.查看所有本地服务器及链接服务器 select * from master..sys ...

  3. Android异步加载图像(含线程池,缓存方法)

    研究了android从网络上异步加载图像: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法. 在主线程中new 一个Han ...

  4. ubuntu 重置密码

      背景:在登陆ubuntu之后,按Ctr+Alt+F1进入控制台时,需要登陆,一时忘了密码... 参考:http://www.cnblogs.com/relaxgirl/p/3179507.html ...

  5. MVC Area Usage

    ASP.NET MVC Area操作 新建 Area:右键 -> Add –> Area 继承 AreaRegistration,重写AreaName属性与RegisterArea方法 p ...

  6. Tri Tiling[HDU1143]

    Tri Tiling Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  7. UVa 11181 条件概率

    题意:n个人选r个人,每个人被选中的概率为pi,问最后每个人被选中的概率是多少. sol:就是个简单的概率题,范围还特别小,深搜秒出...然而公式什么的很多还是需要注意的...     条件概率的公式 ...

  8. CCSpriteBatchNode的优化性能

    当将大量精灵加载到CCLayer时,如果直接利用[self addChild:sprite]去加载,每加载一个精灵,都必须open,draw,close, 而利用 CCSpriteBatchNode去 ...

  9. TYVJ P1002 谁拿了最多奖学金 Label:模拟 水

    背景 NOIP2005复赛提高组第一题 描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同:1)     院士奖学金,每人8000元,期末平均成绩高于80分( ...

  10. 看看 JDK 8 给我们带来什么(转)

    世界正在缓慢而稳步的改变.这次改变给我们带来了一个新模样的JDK7,java社区也在一直期盼着在JDK8,也许是JDK9中出现一些其他的改进.JDK8的改进目标是填补JDK7实现中的一些空白——部分计 ...