python30的新特性.docx

上传人:b****8 文档编号:10964125 上传时间:2023-02-24 格式:DOCX 页数:7 大小:18.56KB
下载 相关 举报
python30的新特性.docx_第1页
第1页 / 共7页
python30的新特性.docx_第2页
第2页 / 共7页
python30的新特性.docx_第3页
第3页 / 共7页
python30的新特性.docx_第4页
第4页 / 共7页
python30的新特性.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

python30的新特性.docx

《python30的新特性.docx》由会员分享,可在线阅读,更多相关《python30的新特性.docx(7页珍藏版)》请在冰豆网上搜索。

python30的新特性.docx

python30的新特性

python3.0的新特性

这篇文章主要介绍了相比于python2.6,python3.0的新特性。

更详细的介绍请参见python3.0的文档。

CommonStumblingBlocks

本段简单的列出容易使人出错的变动(初学者应该注意)。

∙print语句被print()函数取代了,可以使用关键字参数来替代老的print特殊语法。

例如:

Old:

print"Theansweris",2*2

New:

print("Theansweris",2*2)

Old:

printx,                        #使用逗号结尾禁止换行

New:

print(x,end="")            #使用空格代替换行

Old:

print                          #输出新行

New:

print()                        #输出新行

Old:

print>>sys.stderr,"fatalerror"

New:

print("fatalerror",file=sys.stderr)

Old:

print(x,y)                    #输出repr((x,y))

New:

print((x,y))                  #不同于print(x,y)!

你可以自定义输出项之间的分隔符:

  print("Thereare<",2**32,">possibilities!

",sep="")

输出结果是:

  Thereare<4294967296>possibilities!

注意:

print()函数不支持老print语句的"软空格"特性,例如,在python2.x中,print"A\n","B"会输出"A\nB\n",而python3.0中,print("A\n","B")会输出"A\nB\n"

使用 2to3 源码转换工具时,所有的print语句被自动转换成print()函数调用,对大项目,这是无需争论的。

∙python3.0使用字符串(strings)和bytes代替Unicode字符串和8位字符串,这意味着几乎所有使用Unicode编码和二进制数据的代码都要改动。

这个改动很不错,在2.x的世界里,无数的bug都是因为编码问题。

∙map()和filter()返回迭代器(iterators)

∙dict方法keys(),items(),values()返回视图(同样是迭代器)而不是列表(list)

∙内建的sorted()方法和list.sort()方法不再接受表示比较函数的cmp参数,使用key参数代替。

∙1/2返回浮点数,使用1//2能得到整数。

∙repr()函数对于long整数不再包含拖尾的L,所以不加判断的去除最后一个字符会导致去掉一个有用的数字。

StringandBytes

∙现在只有一种字符串:

str,它的行为和实现都很像2.x的unicode串。

∙basestring超类已经去掉了,2to3 工具会把每个出现的basestring替换成str。

∙PEP3137:

新类型bytes,用来表示二进制数据和编码文本,str和bytes不能混合,需要时,必须进行显示的转换,转换方法是str.encode()(str->bytes)和bytes.decode()(bytes->str).

∙在原始字符串(rawstrings)中所有反斜线都按字面量解释,不再特殊处理Unicode转义字符。

∙PEP3112:

bytes字面量,例如b"abc",创建bytes实例。

∙PEP3120:

默认源文件编码为UTF-8

∙PEP3131:

可以使用非ASCII标识符(然而,除了注释中贡献者的名字之外,标准库仍然只包含ASCII)

∙PEP3116:

新的IO实现,API几乎100%向后兼容,二进制文件使用bytes代替strings

∙去除了StringIO和cStringIO模块,取而代之的是io.StringIO或者io.BytesIO

PEP3101:

字符串格式化的新方法

∙str.format方法(原文提到替代了%操作符,实际上,format方法和%的用法差别很大,各有所长)。

PEP3106:

修补了dict的keys(),items(),values()方法

∙删除了dict.iterkeys(),dict.itervalues()和dict.iteritems()

∙dict.keys(),dict.values()和dict.items()返回dict相关数据的引用

PEP3107:

函数注解(FunctionAnnotations)

∙注解函数参数和返回值的标准化方法

ExceptionStuff

∙PEP352:

异常类必须继承自BaseException,它异常结构的基类。

∙移除了StandardError

∙Droppingsequencebehavior(slicing!

)andmessageattributeofexceptioninstances.

∙PEP3109:

抛出异常:

现在必须使用raiseException(args)而不是原来的raiseException,args

∙PEP3110:

捕获异常,现在必须使用exceptExceptionasidentifier而不是原来的exceptException,identifier

∙PEP3134:

异常链(Exceptionchain)。

∙改良了一些windows不能加载模式时的异常信息,具有本地化处理。

NewClassandMetaclassStuff

∙移除了classicclass

∙PEP3115:

新的metaclass语法

∙PEP3119:

抽象基类。

∙PEP3129:

类包装。

∙PEP3141:

数字抽象基类

其他的语言变化

这里列出大多数的python语言核心和内建函数的变化。

∙移除了backticks(使用repr()代替)

∙移除了<>(不等号,使用!

=代替)

∙as和with变成了关键字

∙True,False和None变成了关键字

∙PEP237:

long不存在了,只有int,它和原来的long一样。

不再支持以L结尾的数字字面量。

移除sys.maxint,因为int现在已经是无限大了

∙PEP238:

int相除,返回float

∙改变了顺序操作符的行为,例如x

∙移除了__getslice__,语法a[i:

j]被解释成a.__getitem__(slice(i,j))

∙PEP3102:

keyword-onlyarguments.在函数参数列表中,出现在*args之后的命名参数只能使用"关键字参数"的形式调用

∙PEP3104:

nonlocal声明。

使用nonlocal可以声明一个外部变量(不是global变量)

∙PEP3111:

raw_input()改名为input(),也就是说,新的input()函数从标准输入设备(sys.stdin)读取一行并返回(不包括行结束符),如果输入过早终止,该函数抛出EOFError,如果想使用老的input(),可以使用(input())代替。

∙xrange()改名为range(),range()现在不是产生一个列表(list),而是一个迭代器。

∙PEP3113:

移除了"元组参数拆包(tupleparameterunpacking)"。

这种写法已经不行了:

1.deffoo(a,(b,c)):

2.

3.现在要这样写:

4.

5.deffoo(a,b_c):

6.    b,c=b_c

复制代码

∙PEP3114:

next()重命名为__next__(),新的内建函数next()可以调用一个对象的__next__()方法。

∙PEP3127:

新的八进制字面量,二进制字面量和bin()函数。

你应该写0o666而不是0666,oct()函数也做了响应的改动。

同样,0b1010等价于10,bin(10)返回"0b1010″。

0666这种写法现在是错误的。

∙PEP3132:

支持迭代器拆包。

现在你可以这样写:

1.a,b,*rest=some_seqence

2.

3.甚至象这样:

4.

5.*rest,a=stuff

6.一般情况下,rest对象是list,而等号右边的对象是可迭代的

复制代码

∙PEP3135:

新的super()。

你可以不适用任何参数调用super(),正确的参数和实例会被正确选择。

如果使用参数,它的行为不变,和以前一样。

∙zip(),map(),filter()返回迭代器。

∙移除了string.letters和它的小伙伴们(string.lowcase和string.uppercase),现在上场的是string.ascii_letters等

∙移除了apply(),callable(),exefile(),file(),reduce(),reload()

∙移除了dict.has_key()。

使用in操作符进行测试

∙exec语句没有了,现在是exec()函数

∙移除了__oct__()和__hex__()特殊方法。

oct()和hex()方法使用__index__()

∙移除了对__members__和__methods__的支持

∙nb_nonzero重命名为nb_bool,__nonzero__()重命名为__bool__()

Optimizations

∙一般情况下,python3.0比python2.5慢33%左右。

不过仍有提升空间。

模块变动(新的,改进的和废弃的)

∙移除了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()

BuildandCAPIChanges

Python'sbuildprocess和CAPI的改动包括:

∙PEP3118:

新的BufferAPI

PEP3121:

扩展模块的的Initialization&Finalization

∙PEP3123:

使PyObject_HEAD符合标准C

其他的改动和修复

在源码里分散一系列的改进和bug修复。

changeslog表明,从2.6到3.0,有XXX个改动和YYY的bug修复。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1