当前位置:首页 > 服务端 > [zz]Python3.x新特性

[zz]Python3.x新特性

2022年09月16日 22:13:24服务端4

Python3.x新特性

一、装了一个Python3.0(win环境下),写了个hello world测试

print 'hello world'

用IDLE运行的时候,结果报错: invalid syntax

查了一下资料才知道3.0竟然与2.x版的语言不兼容,需要

print ('hello world'),真是太假了,那群SB竟然这样改!人家C++还向C兼容,python竟然版本都不兼容了!!

二、What's new in 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<y,当x和y类型不匹配时抛出TypeError而不是返回随即的bool值
  • 移除了__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&rsquo;s build process和C API的改动包括:

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

 

from: http://hi.baidu.com/bellgrade/item/ae7b4936b35c609cb80c03a1

作者:n0p
来源链接:https://www.cnblogs.com/nn0p/archive/2012/11/18/2776425.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42186.html

标签: Python
分享给朋友:

“[zz]Python3.x新特性” 的相关文章

Python:实用的IPython(一种交互式开发环境)

Python:实用的IPython(一种交互式开发环境)

用习惯了CentOS突然又用Windows,写Python想在控制端写怎么办?别急,一招教你在Windows终端写出一手舒服的代码! 欢迎光临,我的主页。更多干货,等你来学: 不许代码码上红 警句:莫道君行早,更有早行人。...

Python "爬虫"出发前的装备之一正则表达式

1. 正则表达式 正则表达式是一种模板表达式语言 通过定义规则去匹配、查找、替换、分割一个长字符串中特定的子字符信息。 如在一篇文章中查找出所有合法的电子邮箱地址,则可以先用正则表达式定义一个电子邮箱规则,然后再使用这个规则在整个字符串中查找。 爬虫程序一般都会...

Python 查找算法

Python 查找算法

查找算法是用来检索序列数据(群体)中是否存在给定的数据(关键字),常用查找算法有: 线性查找: 线性查找也称为顺序查找,用于在无序数列中查找。 二分查找: 二分查找也称为折半查找,其算法用于有序数列。 插值查找: 插值查找是对二分查找算法的改进。...

Python 一网打尽<排序算法>之从希尔排序算法的分治哲学开始

Python 一网打尽<排序算法>之从希尔排序算法的分治哲学开始

1. 前言 本文将介绍希尔排序、归并排序、基数排序(桶排序)。 在所有的排序算法中,冒泡、插入、选择属于相类似的排序算法,这类算法的共同点:通过不停地比较,再使用交换逻辑重新确定数据的位置。 希尔、归并、快速排序算法也可归为同一类,它们的共同点都是建立在分治思想之上。...

Python快速学习09: 函数的参数

Python快速学习09: 函数的参数

前言   系列文章:[传送门]   继续干起来!!   正文     我们已经接触过函数,函数是可以被引用的(访问或者以其他变量作为其别名),也作为参数传入函数,以及作为列表和字典等等容器...

关于环境变量的配置

环境变量配置 java要配置到bin目录和jre的bin目录 python要配置到pythonProject的Scripts目录 作者:花痴dy 来源链接:https://www.cnblogs.co...

Selenium学习第一章:搭建测试环境

Selenium学习第一章:搭建测试环境

一:下载python,官网地址:https://www.python.org/,傻瓜式安装(最好不要装在C盘)   二:配置环境变量 右击“计算机”—“属性”—“环境变量”,在系统变量“Path”中添加你安装python的这两个地址(中间隔开用英文分号)...

python解释器安装教程以及环境变量的配置

python解释器安装教程以及环境变量的配置

一‘’Python是一门强大的语言,目前已支持所有主流操作系统,在Windows7,Windows10系统上需要安装一下: 打开官网 https://www.python.org/downloads/windows/ 下载中心 最上边是两个最新的版本,长期计划...

python与pycharm的安装及环境变量配置

python与pycharm的安装及环境变量配置

python安装步骤 python2.7 进入python官网 选择操作系统 选择版本号 按提示进行安装 一路next,直至安装完成! python3.6...

python3.4 + pycharm 环境安装 + pycharm使用

python3.4 + pycharm 环境安装 + pycharm使用

遇到很多初学者的盆友,来问python环境安装的问题。。因此,这篇文章就诞生了。。 因个人是windows的环境,所以本文只讲windows环境下的python安装。 作为初用python的盆友,强烈建议只在电脑上装一个python版本就好了,不然就进了各种坑里了。...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。