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*2

New: >>>print("The answer is", 2*2)

Old: >>>print x, # Trailing comma suppresses newline

New: >>>print(x, end=" ") # Appends a space instead of a newline

Old: >>>print # Prints a newline

New: >>>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 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 结果为:True

New: >>>11 < 'ORACLE' # Python 3 这种比较将导致TypeError异常

07.标识符支持非 ASCII 字符

复制代码 代码如下:

所有 = all

class 男人:

@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到本地的ex

try:

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)

True

New: >>> 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

python 3.0 print_Python 3.x 新特性及10大变化相关推荐

  1. Python 3.11 中的最佳新特性和修正

    更快的解释器,更易懂的错误,更强大的类型提示,以及其他一系列的加速和调整,现在都可以试用了. Python 每年都会发布新版本,上半年是功能锁定的测试版,年底是最终版本. Python 3.11 的特 ...

  2. Python培训分享:Python新版本中的6个新特性

    Python在几年做了一个全面的升级,此次Python升级中有6个新特性,本期小编为大家介绍的Python培训教程就是关于介绍Python新版本中的6个新特性的,来看看下面的详细介绍. Python培 ...

  3. c#3.0加入的一些新特性——泛型集合

    c#3.0加入的一些新特性 1.泛型集合 2.隐式类型 3.自动实现属性 3.匿名方法 4.扩展方法 5.Lambda表达式 1.泛型集合 在.NET2.0中没有泛型集合定义集合用ArrayList定 ...

  4. mysql+8.0+新特性_MySQL 8.0备受瞩目的新特性大放送!

    原标题:MySQL 8.0备受瞩目的新特性大放送! 作者介绍 杨奇龙,目前就职于有赞科技,负责数据库运维工作,熟悉MySQL性能优化.故障诊断.性能压测. MySQL于 2016-09-12正式发布8 ...

  5. .NET Core 3.0 正式公布:新特性详细解读

    点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 作者丨Richard Lander 译者丨核子可乐 策划丨赵钰莹 近日,.NE ...

  6. python3.8的用法_体验一下 Python 3.8 带来的主要新特性

    学习理解一个软件非常好的方法就是跟随每一个版本演进的新特性,好比一个人被别人看着长大的,知子莫若父.因此每个版本的 Changelogs 或 What's New 是非常值得一读的,见 What's ...

  7. Android 十年总结:1.5 到 10.0 都有哪些新特性?面试常问题

    文热导读|   点击标题阅读 知识星球第三期开园了- 转自:嘟嘟呢 Android 1.5(Cupcake纸杯蛋糕): 智能虚拟键盘:使用widgets实现桌面个性化:在线文件夹(Live Folde ...

  8. C# 3.0/3.5语法新特性示例汇总[转]

    //作者:杨卫国 //时间:2008年2月21日 //说明:C#语法新特型示例 using System; using System.Collections.Generic; using System ...

  9. Angular4.0.0正式发布,附新特性及升级指南

    作者|孙薇编辑|尾尾经历了6个RC版本之后,Angular项目组终于在今天发布了新版,即 正式版 Angular 4.0.0.新版的 Angular 有哪些值得关注的点,究竟带来了哪些新特性?如何升级 ...

最新文章

  1. [扫盲] Salesforce.com: 业界云计算(Cloud Computing)的主要倡导者之一
  2. VC嵌入断点中断INT3
  3. 百度地图-省市县联动加载地图
  4. 转载:【Data Management】PhotoLocations源程序
  5. 附加数据库失败,版本为655,此服务器支持611及更低版本。不支持降级路径。...
  6. IntelliJ IDEA 16创建Web项目
  7. 前端学习(1339):mongodb更新数据文档
  8. 低学历的非要考研,多半输得更惨
  9. 求小数的某一位(信息学奥赛一本通-T1082)
  10. 计算时间间隔分钟_九个小技巧,玩转Excel的时间计算
  11. 中关村开发者社区代表向全球发出这样一份倡议!
  12. San 3.7.3 发布,百度开源的 MVVM 组件框架
  13. Python基础——@staticmethod与@classmethod
  14. Java的测试方法有哪些?自动化测试让Java测试变得更简单!
  15. Linux 下载GCC
  16. cpri带宽不足的解决方法_CPRI基带数据的低损耗压缩
  17. 类继承和接口继承的差别
  18. LT8618SXB-HDMI发射器,运行功率小于100mA播放24bit 1080P内容,待机功率小于2mA
  19. python random函数sample_Python random.sample()用法及代码示例
  20. 计算机30首音乐怎么开,qq每日精选_qq音乐每日精选30首在哪找

热门文章

  1. 文巾解题 184. 部门工资最高的员工
  2. zip与zip(*)
  3. 支持向量机原理(二)
  4. python 材料科学与工程专业_2020年最全的python的就业方向+清华计算机社流出上千集编程资料...
  5. python复制俩文件夹相同文件_Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法...
  6. Jupyterlab 插件安装后侧边栏找不到的解决
  7. 第3章 衡量线性回归的指标:MSE,RMSE,MAE
  8. 支付宝架构师眼里的高并发架构
  9. 什么是WeakHashMap--转
  10. hadoop和spark搭建记录