收藏 分享(赏)

python3.0的新特性.doc

上传人:HR专家 文档编号:5958803 上传时间:2019-03-22 格式:DOC 页数:10 大小:113.90KB
下载 相关 举报
python3.0的新特性.doc_第1页
第1页 / 共10页
python3.0的新特性.doc_第2页
第2页 / 共10页
python3.0的新特性.doc_第3页
第3页 / 共10页
python3.0的新特性.doc_第4页
第4页 / 共10页
python3.0的新特性.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、python3.0 的新特性这篇文章主要介绍了相比于 python2.6,python3.0 的新特性。更详细的介绍请参见python3.0 的文档。Common 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=“ “) # 使用空格代替换行O

2、ld: print # 输出新行New: print() # 输出新行Old: print sys.stderr, “fatal error“New: 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 语句的“软空格“特性

3、,例如,在 python2.x 中,print “An“, “B“会输出“AnBn“,而 python3.0 中,print(“An“, “B“)会输出“An Bn“使用 2to3 源码转换工具时,所有的 print 语句被自动转换成 print()函数调用,对大项目,这是无需争论的。 python3.0 使用字符串(strings)和 bytes 代替 Unicode 字符串和 8 位字符串,这意味着几乎所有使用 Unicode 编码和二进制数据的代码都要改动。这个改动很不错,在 2.x 的世界里,无数的 bug 都是因为编码问题。 map()和 filter()返回迭代器(iterator

4、s) dict 方法 keys(),items(),values()返回视图(同样是迭代器)而不是列表(list) 内建的 sorted()方法和 list.sort()方法不再接受表示比较函数的 cmp 参数,使用key 参数代替。 1/2 返回浮点数,使用 1/2 能得到整数。 repr()函数对于 long 整数不再包含拖尾的 L,所以不加判断的去除最后一个字符会导致去掉一个有用的数字。String and Bytes 现在只有一种字符串:str,它的行为和实现都很像 2.x 的 unicode 串。 basestring 超类已经去掉了,2to3 工具会把每个出现的 basestrin

5、g 替换成 str。 PEP3137:新类型 bytes,用来表示二进制数据和编码文本,str 和 bytes 不能混合,需要时,必须进行显示的转换,转换方法是 str.encode()(str-bytes)和bytes.decode()(bytes-str). 在原始字符串(raw strings)中所有反斜线都按字面量解释,不再特殊处理 Unicode转义字符。 PEP3112:bytes 字面量,例如 b“abc“,创建 bytes 实例。 PEP3120:默认源文件编码为 UTF-8 PEP3131:可以使用非 ASCII 标识符(然而,除了注释中贡献者的名字之外,标准库仍然只包含 A

6、SCII) PEP3116:新的 IO 实现,API 几乎 100%向后兼容,二进制文件使用 bytes 代替strings 去除了 StringIO 和 cStringIO 模块,取而代之的是 io.StringIO 或者 io.BytesIOPEP3101:字符串格式化的新方法 str.format 方法( 原文提到替代了% 操作符,实际上,format 方法和%的用法差别很大,各有所长)。PEP3106:修补了 dict 的 keys(),items(),values()方法 删除了 dict.iterkeys(),dict.itervalues()和 dict.iteritems()

7、dict.keys(),dict.values()和 dict.items()返回 dict 相关数据的引用PEP3107:函数注解(Function Annotations) 注解函数参数和返回值的标准化方法Exception Stuff PEP352:异常类必须继承自 BaseException,它异常结构的基类。 移除了 StandardError Dropping sequence behavior (slicing!) and message attribute of exception instances. PEP3109:抛出异常:现在必须使用 raise Exception(a

8、rgs)而不是原来的 raise Exception, args PEP3110:捕获异常,现在必须使用 except Exception as identifier 而不是原来的except Exception, identifier PEP3134:异常链(Exception chain)。 改良了一些 windows 不能加载模式时的异常信息,具有本地化处理。New Class and Metaclass Stuff 移除了 classic class PEP3115:新的 metaclass 语法 PEP3119:抽象基类。 PEP3129:类包装。 PEP3141:数字抽象基类其他的

9、语言变化这里列出大多数的 python 语言核心和内建函数的变化。 移除了 backticks(使用 repr()代替) 移除了(不等号,使用 !=代替) as 和 with 变成了关键字 True,False 和 None 变成了关键字 PEP237:long 不存在了,只有 int,它和原来的 long 一样。不再支持以 L 结尾的数字字面量。移除 sys.maxint,因为 int 现在已经是无限大了 PEP238:int 相除,返回 float 改变了顺序操作符的行为,例如 xy,当 x 和 y 类型不匹配时抛出 TypeError 而不是返回随即的 bool 值 移除了_getsli

10、ce_,语法 ai:j被解释成 a._getitem_(slice(i,j) PEP3102:keyword-only arguments.在函数参数列表中,出现在*args 之后的命名参数只能使用“关键字参数“的形式调用 PEP3104:nonlocal 声明。使用 nonlocal 可以声明一个外部变量( 不是 global 变量) PEP3111:raw_input() 改名为 input(),也就是说,新的 input()函数从标准输入设备(sys.stdin)读取一行并返回(不包括行结束符),如果输入过早终止,该函数抛出EOFError,如果想使用老的 input(),可以使用(in

11、put()代替。 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:新的八进制字面量,二进制字面量和 bin()函数。你应该写 0o666 而不

12、是 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(),filter()返回

13、迭代器。 移除了 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 重

14、命名为 nb_bool,_nonzero_()重命名为_bool_()Optimizations 一般情况下,python 3.0 比 python 2.5 慢 33%左右。不过仍有提升空间。模块变动(新的,改进的和废弃的) 移除了 cPickle 模块,可以使用 pickle 模块代替。最终我们将会有一个透明高效的模块。 移除了 imageop 模块 移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold,

15、strop, sunaudiodev, timing 和 xmllib 模块 移除了 bsddb 模块( 单独发布,可以从http:/www.jcea.es/programacion/pybsddb.htm 获取) 移除了 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 修复。

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报