热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

这篇文章主要介绍了相比于python2.6,python3.0的新特性。更详细的介绍请参见python3.0的文档。

 

 

Common Stumbling Blocks

本段简单的列出容易使人出错的变动。

 

  • print语句被print()函数取代了,可以使用关键字参数来替代老的print特殊语法。例如:
    1. 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)!
    你可以自定义输出项之间的分隔符:
         print("There are <", 2**32, "> possibilities!", sep="")
    输出结果是:
         There are <4294967296> possibilities!
    注意: 
    1. print()函数不支持老print语句的“软空格”特性,例如,在python2.x中,print "A\n", "B"会输出"A\nB\n",而python3.0中,print("A\n", "B")会输出"A\n B\n"
    2. 学会渐渐习惯print()吧!
    3. 使用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,所以不加判断的去除最后一个字符会导致去掉一个有用的数字

 

String and Bytes

  • 现在只有一种字符串:str,它的行为和实现都很像2.x的unicode串。
  • basestring超类已经去掉了,2to3工具会把每个出现的basestring替换成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标识符(然而,除了注释中贡献者的名字之外,标准库仍然只包含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:函数注解(Function Annotations)

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

 

Exception Stuff

  • PEP352:异常类必须继承自BaseException,它异常结构的基类。
  • 移除了StandardError
  • Dropping sequence behavior (slicing!) 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

  • 移除了classic 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
  • 移除了__getslice__,语法a[i:j]被解释成a.__getitem__(slice(i,j))
  • PEP3102:keyword-only arguments.在函数参数列表中,出现在*args之后的命名参数只能使用"关键字参数"的形式调用
  • PEP3104:nonlocal声明。使用nonlocal可以声明一个外部变量(不是global变量)
  • PEP3111:raw_input()改名为input(),也就是说,新的input()函数从标准输入设备(sys.stdin)读取一行并返回(不包括行结束符),如果输入过早终止,该函数抛出EOFError,如果想使用老的input(),可以使用eval(input())代替。
  • xrange()改名为range(),range()现在不是产生一个列表(list),而是一个迭代器。
  • PEP3113:移除了"元组参数拆包(tuple parameter unpacking)"。这种写法已经不行了:
    def foo(a, (b, c)):...
    现在要这样写:
    def foo(a, b_c):
          b,c = b_c
  • PEP3114:next()重命名为__next__(),新的内建函数next()可以调用一个对象的__next__()方法。
  • PEP3127:新的八进制字面量,二进制字面量和bin()函数。你应该写0o666而不是0666,oct()函数也做了响应的改动。同样,0b1010等价于10,bin(10)返回"0b1010"。0666这种写法现在是错误的。
  • PEP3132:支持迭代器拆包。现在你可以这样写:
    a, b, *rest = some_seqence
    甚至象这样:
    *rest, a = stuff
    一般情况下,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

  • 一般情况下,python 3.0比python 2.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()

 

Build and C API Changes

Python’s build process和C API的改动包括:

  • PEP3118:新的Buffer API
  • PEP3121:扩展模块的的Initialization & Finalization
  • PEP3123:使PyObject_HEAD符合标准C

 

其他的改动和修复

在源码里分散一系列的改进和bug修复。changes log表明,从2.6到3.0,有XXX个改动和YYY的bug修复。

 

 

http://www.iteye.com/topic/259156


推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • php支持中文文件名
    2019独角兽企业重金招聘Python工程师标准大家可能遇到过上传中文文件名的文件,或者读取中文目录时不能读取,出现错误的情况这种情况是因为php自动将中文字符转成了utf8 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
author-avatar
无石笑_987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有