python3.0地新特性.doc

上传人:李司机 文档编号:1090697 上传时间:2022-06-23 格式:DOC 页数:6 大小:104.89KB
返回 下载 相关 举报
python3.0地新特性.doc_第1页
第1页 / 共6页
python3.0地新特性.doc_第2页
第2页 / 共6页
python3.0地新特性.doc_第3页
第3页 / 共6页
python3.0地新特性.doc_第4页
第4页 / 共6页
python3.0地新特性.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《python3.0地新特性.doc》由会员分享,可在线阅读,更多相关《python3.0地新特性.doc(6页珍藏版)》请在三一办公上搜索。

1、这篇文章主要介绍了相比于python2.6,python3.0的新特性。更详细的介绍请参见。mon Stumbling Blocks本段简单的列出容易使人出错的变动初学者应该注意。 print语句被print()函数取代了,可以使用关键字参数来替代老的print特殊语法。例如:Old: print The answer is, 2*2New: print(The answer is, 2*2)Old: print x,# 使用逗号结尾禁止换行New: print(x, end= )# 使用空格代替换行Old: print# 输出新行New: print()# 输出新行Old: print sy

2、s.stderr, fatal errorNew: print(fatal error, file=sys.stderr)Old: print (x, y) # 输出repr(x, y)New: print(x, y) # 不同于print(x, y)!你可以自定义输出项之间的分隔符: print(There are possibilities!, sep=)输出结果是: There are possibilities!注意:print()函数不支持老print语句的软空格特性,例如,在python2.x中,print An, B会输出AnBn,而python3.0中,print(An, B)

3、会输出An Bn使用2to3源码转换工具时,所有的print语句被自动转换成print()函数调用,对大项目,这是无需争论的。 python3.0使用字符串(strings)和bytes代替Unicode字符串和8位字符串,这意味着几乎所有使用Unicode编码和二进制数据的代码都要改动。这个改动很不错,在2.x的世界里,无数的bug都是因为编码问题。 map()和filter()返回迭代器(iterators) dict方法keys(),items(),values()返回视图(同样是迭代器)而不是列表(list) 内建的sorted()方法和list.sort()方法不再承受表示比拟函数的

4、cmp参数,使用key参数代替。 1/2返回浮点数,使用1/2能得到整数。 repr()函数对于long整数不再包含拖尾的L,所以不加判断的去除最后一个字符会导致去掉一个有用的数字。String and Bytes 现在只有一种字符串:str,它的行为和实现都很像2.x的unicode串。 basestring超类已经去掉了,2to3工具会把每个出现的basestring替换成str。 PEP3137:新类型bytes,用来表示二进制数据和编码文本,str和bytes不能混合,需要时,必须进展显示的转换,转换方法是str.encode()(str-bytes)和bytes.decode()(b

5、ytes-str). 在原始字符串(raw strings)中所有反斜线都按字面量解释,不再特殊处理Unicode转义字符。 PEP3112:bytes字面量,例如babc,创建bytes实例。 PEP3120:默认源文件编码为UTF-8 PEP3131:可以使用非ASCII标识符(然而,除了注释中贡献者的名字之外,标准库仍然只包含ASCII) PEP3116:新的IO实现,API几乎100%向后兼容,二进制文件使用bytes代替stringsPEP3101:字符串格式化的新方法 str.format方法(原文提到替代了%操作符,实际上,format方法和%的用法差异很大,各有所长)。PEP3

6、106:修补了dict的keys(),items(),values()方法 删除了dict.iterkeys(),dict.itervalues()和dict.iteritems() dict.keys(),dict.values()和dict.items()返回dict相关数据的引用PEP3107:函数注解(Function Annotations) 注解函数参数和返回值的标准化方法Exception Stuff PEP352:异常类必须继承自BaseException,它异常结构的基类。 移除了StandardError Dropping sequence behavior (slicin

7、g!) and message attribute of exception instances. PEP3109:抛出异常:现在必须使用raise Exception(args)而不是原来的raise Exception, args PEP3110:捕获异常,现在必须使用except Exception as identifier而不是原来的except Exception, identifier PEP3134:异常链(Exception chain)。 改良了一些windows不能加载模式时的异常信息,具有本地化处理。New Class and Metaclass Stuff 移除了cl

8、assic class 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

9、y,当x和y类型不匹配时抛出TypeError而不是返回随即的bool值 移除了_getslice_,语法ai:j被解释成a._getitem_(slice(i,j) PEP3102:keyword-only arguments.在函数参数列表中,出现在*args之后的命名参数只能使用关键字参数的形式调用 PEP3104:nonlocal声明。使用nonlocal可以声明一个外部变量(不是global变量) PEP3111:raw_input() 改名为input(),也就是说,新的input()函数从标准输入设备(sys.stdin)读取一行并返回(不包括行完毕符),如果输入过早终止,该函数

10、抛出EOFError,如果想使用老的input(),可以使用(input()代替。 xrange()改名为range(),range()现在不是产生一个列表(list),而是一个迭代器。 PEP3113:移除了元组参数拆包(tuple parameter unpacking)。这种写法已经不行了:1. def foo(a, (b, c):2.3. 现在要这样写:4.5. def foo(a, b_c):6. b,c = b_c复制代码 PEP3114:next()重命名为_next_(),新的内建函数next()可以调用一个对象的_next_()方法。 PEP3127:新的八进制字面量,二进制

11、字面量和bin()函数。你应该写0o666而不是0666,oct()函数也做了响应的改动。同样,0b1010等价于10,bin(10)返回0b1010。0666这种写法现在是错误的。 PEP3132:支持迭代器拆包。现在你可以这样写:1. a, b, *rest = some_seqence2.3. 甚至象这样:4.5. *rest, a = stuff6. 一般情况下,rest对象是list,而等号右边的对象是可迭代的复制代码 PEP3135:新的super()。你可以不适用任何参数调用super(),正确的参数和实例会被正确选择。如果使用参数,它的行为不变,和以前一样。 zip(),map

12、(),filter()返回迭代器。 移除了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 一般情况下,python 3.0比python 2.5慢33%左右。不过仍有提

13、升空间。模块变动(新的,改良的和废弃的) 移除了cPickle模块,可以使用pickle模块代替。最终我们将会有一个透明高效的模块。 移除了imageop模块 移除了audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模块 移除了bsddb模块(单独发布,可以从获取) 移除了new模块 os.tmpnam()和os.tmpfile()函数被移动到tmpfile模块下 tokenize模块现在使用bytes工作。主要的入口点不再是generate_tokens,而是tokenize.tokenize()Build and C API ChangesPythons build process和C API的改动包括: PEP3118:新的Buffer APIPEP3121:扩展模块的的Initialization & Finalization PEP3123:使PyObject_HEAD符合标准C其他的改动和修复在源码里分散一系列的改良和bug修复。changes log明确,从2.6到3.0,有XXX个改动和YYY的bug修复。6 / 6

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号