我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python 3.x 新特性及10大变化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python 3.x 新特性及10大变化

投稿:junjie  字体:[增加 减小] 类型:转载 时间:2015-06-12 我要评论

这篇文章主要介绍了Python 3.x 新特性及10大变化,本文讲解了Python之父Guido van Rossum谈到了Python 3.0的构思,Python3版本的一些变化如print() and exec() 函数、整数及除法、input()代替raw_input()等,需要的朋友可以参考下

Python 3.x 起始版本是Python 3.0,目前的最新版本是 3.3.3

Python之父Guido van Rossum谈到了Python 3.0的构思:

一直以来,除非要打破向后兼容性,否则很多缺陷和错误都无法修复。因此,Python 3000将会作为第一个放弃向后兼容性的Python版本,目的就是要让Python向着最好的语言前进。

Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容。许多针对早期Python版本设计的程序都无法在Python 3.0上正常运行。为了照顾现有程序,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。基于早期Python版本而能正常运行于Python 2.6并无警告。程序可以通过一个2to3的转换工具无缝迁移到Python 3.0。Python有一些很有用的测试模块,包括doctext和unitest。确保在尝试移植到Python3之前,对应用程序进行全面测试。要确保测试范围尽可能大,而且程序在Python2.6上运行时,能通过测试并且没有出现任何警告信息。

新的Python程序建议使用Python 3.0版本的语法。除非运行环境无法安装Python 3.0或者程序本身使用了不支持Python 3.0的第三方库。目前不支持Python 3.0的第三方库有Twisted, py2exe, PIL等。大多数第三方库都正在努力地兼容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写兼容Python 3.0版本的程序,然后使用Python 2.6, Python 2.7来运行。Python 2.7被确定为最后一个Python 2.x版本,它除了支持Python 2.x语法外,还支持部分Python 3.1语法.

变化大致总结如下: 

01.print() and exec() 函数

python旧版本里,print和exec是作为一语句出现,可以用print "Hello,World!", 来打印一个语句,在新版本里,print()和exec()作为一个函数出现,所以上面的写就是错误的,应该写成print ("Hello,World!")对于Java的程序员来说,这样的改变应该是比较熟悉. System.out.print("Hello,World!");

复制代码 代码如下:

Old: >>>print "The answer is", 2*2New: >>>print("The answer is", 2*2)Old: >>>print x,           # Trailing comma suppresses newlineNew: >>>print(x, end=" ")  # Appends a space instead of a newlineOld: >>>print              # Prints a newlineNew: >>>print()            # You must call the function!Old: >>>print >>sys.stderr, "fatal error"New: >>>print("fatal error", file=sys.stderr)Old: >>>print (x, y)       # prints repr((x, y))New: >>>print((x, y))      # Not the same as print(x, y)!

不过在Python 2.6版本里面: from __future__ import print_function

复制代码 代码如下:

>>> from __future__ import print_function>>> print ('Jerry','Sherry',sep='-')Jerry-Sherry

下面的修改在新版本是正确的:

复制代码 代码如下:

>>>print("There are <", 2**32, "> possibilities!", sep="")There are <4294967296> possibilities!>>>fid = open("log.txt", "a")>>>print("log.txt", file=fid)>>>print("Foo", "Bar", sep="%")>>>Foo%Bar

exec() 同样是函数,在python 2.x里,下列代码是ok的.

复制代码 代码如下:

>>> def foo(): exec('a=4') print a >>> foo()4

但在python 3.x里面就不行了,会报NameError: global name 'a' is not defined. 因为变量a没有定义。原因在于exec()作为函数,只操作globals()和locals()函数返回的字典。但locals()函数返回的字典实际上是局部变量的一个副本。exec()函数中进行的赋值只修改了局部变量的这份副本,而非局部变量本身。下面给出了一种解决办法:

复制代码 代码如下:

>>> def foo(): _locals = locals() exec('a=4',globals(),_locals) a = _locals['a'] print (a) >>> foo()4

02.整数及除法

int和long统一为int, int表示任何精度的整数,移除sys.maxint, 因为int已经是最大的整数。新版本移除了含糊的除法符号('/'),而只返回浮点数。在以前的版本中,如果参数是int或者是long的话,就会返回相除后结果的向下取整(floor), 而如果参数是float或者是complex的话,那么就会返回相除后结果的一个恰当的近似。

复制代码 代码如下:

Old: >>>1/2   #结果是0     晕死。。。New: >>>1/2   #结果是0.5   总算接地气了。

03.input()代替raw_input()变简洁了。

复制代码 代码如下:

Old:  >>>question = raw_input("What is your quest? ")New:  >>>question = input("What is your quest? ")

04.源文件编码默认为UTF-8

Python 3 在字符编码方面有很多改进,其中之一就是默认的源文件编码从ASCII变为UTF-8,也就是说以前在文件头加上的各种花样的 coding=utf-8不再需要了!


复制代码 代码如下:

# coding: UTF-8# vim:fileencoding=UTF-8# -*- coding=UTF-8 -*-# vim: set fileencoding=UTF-8

05.字符串格式化变化

格式化字符串的这个内置的%操作符太有限了,新版本新增加了format(),比以前更灵活了,%要逐渐被淘汰。举三个简单的例子如下:


复制代码 代码如下:

>>>"I love {0}, {1}, and {2}".format("eggs", "bacon", "sausage")'I love eggs, bacon, and sausage'

>>>"I love {a}, {b}, and {c}".format(a="eggs", b="bacon", c="sausage")

'I love eggs, bacon, and sausage'


>>>"I love {0}, {1}, and {param}".format("eggs", "bacon", param="sausage")

'I love eggs, bacon, and sausage'


06.比较Python3对于值的比较要严格得多。在Python2中,任意两个对象均可进行比较,例如:

复制代码 代码如下:

Old: >>>11 < 'ORACLE'   # Python 2 结果为:TrueNew: >>>11 < 'ORACLE'   # Python 3 这种比较将导致TypeError异常

07.标识符支持非 ASCII 字符

复制代码 代码如下:

所有 = allclass 男人:    @classmethod    def 包括(cls,ta):        return isinstance(ta,cls)def 一起玩(人们):    if 所有(男人.包括(ta) for ta in 人们):        print ("他们是×××")    else:        print ("他们是朋友")汤姆 = 男人()杰瑞 = 男人()

一起玩([汤姆,杰瑞])

>>>

他们是×××


08.异常处理

* 异常类必须继承自BaseException,它是异常结构的基类。* 移除了StandardError* 抛出异常:使用raise Exception(args)而不是原来的raise Exception, args* 捕获异常: 使用except Exception as identifier而不是原来的except Exception, identifier* 异常链(Exception chain)。* 改良了一些windows不能加载模式时的异常信息,具有本地化处理。例子1:  Python 3中的异常处理


复制代码 代码如下:

# 绑定ValueError到本地的extry:    x = float('blah')except ValueError as ex:    print("value exception occurred ", ex)# 同时捕获两个不用的异常try:    x = float('blah')except (ValueError, NameError):    print("caught both types of exceptions")

例子2:  Python 3中的隐式异常链

复制代码 代码如下:

def divide(a, b):    try:        print(a/b)    except Exception as exc:        def log(exc):            fid = open('logfile.txt') # missing 'w'            print(exc, file=fid)            fid.close()            log(exc)

divide(1,0)

09.字典dict

 Python 3.0 内的另一个重大改变是字典内dict.iterkeys(),dict.itervalues(),dict.iteritems()方法的删除。取而代之的是:dict.keys(),dict.values(),dict.items(),它们被进行了修补,可以返回轻量的、类似于集的容器对象,而不是键和值的列表。这样的好处是在不进行键和条目复制的情况下,就能在其上执行set操作。dict.has_key()同样被移除。

复制代码 代码如下:

>>> d = {1:"Food",2:"Book"}>>> d.keys(), d.values(),d.items()>>> for values in d.items(): print (values)(1, 'Food')(2, 'Book')>>> keys = list(d.items())>>> print (keys)[(1, 'Food'), (2, 'Book')]Old:  >>> d.has_key(1)TrueNew: >>> 1 in d     #新版本判断key是否在字典里面True

10.其他改变

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

* 移除了<>(不等号,使用!=代替)* as和with 变成了关键字* True,False和None变成了关键字* 移除了__getslice__,语法a[i:j]被解释成a.__getitem__(slice(i,j))* nonlocal声明。使用nonlocal可以声明一个外部变量(不是global变量)* xrange()改名为range(),range()现在不是产生一个列表(list),而是一个迭代器。* next()重命名为__next__(),新的内建函数next()可以调用一个对象的__next__()方法。* 八进制字,二进制和bin()函数。应该写0o666而不是0666,oct()函数也做了响应的改动。同样,0b1010等价于10,bin(10)返回”0b1010″。


复制代码 代码如下:

>>>0o13             #八进制转十进制11>>>0b010101         #八进制转二进制21


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python 3.x 新特性及10大变化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python 3.x 新特性及10大变化

投稿:junjie  字体:[增加 减小] 类型:转载 时间:2015-06-12 我要评论这篇文章主要介绍了Python 3.x 新特性及10大变化,本文讲解了Python之父Guido van Rossum谈到了Python 3.0的构
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录