Python 3 - 新功能
-
__future__ 模块
Python 3.x 引入了一些 Python 2 不兼容的关键字和函数,这些关键字和函数可以通过 Python 2 中内置的 __future__ 模块导入。如果您计划为您的代码提供 Python 3.x 支持,建议使用 __future__ 导入。例如,如果我们想要在 Python 2 中使用 Python 3.x 的整数除法行为,请添加以下 import 语句。from __future__ import division
-
print 函数
Python 3 中最显着和最广为人知的变化是print函数被使用。现在必须将括号 () 与print 函数一起使用。它在 Python 2 中是可选的。print "Hello World" #is acceptable in Python 2 print ("Hello World") # in Python 3, print must be followed by ()
默认情况下,print() 函数会在末尾插入一个新行。在 Python 2 中,可以通过在末尾放置 ',' 来抑制它。在 Python 3 中,"end =' '" 附加空格而不是换行符。print x, # Trailing comma suppresses newline in Python 2 print(x, end=" ") # Appends a space instead of a newline in Python 3
-
从键盘读取输入
Python 2 有两个版本的输入函数,input()和raw_input(). 如果接收到的数据包含在引号“”或“”中,则 input() 函数将接收到的数据视为字符串,否则将数据视为数字。在 Python 3 中,raw_input() 函数已弃用。此外,接收到的数据始终被视为字符串。In Python 2 >>> x = input('something:') something:10 #entered data is treated as number >>> x 10 >>> x = input('something:') something:'10' #entered data is treated as string >>> x '10' >>> x = raw_input("something:") something:10 #entered data is treated as string even without '' >>> x '10' >>> x = raw_input("something:") something:'10' #entered data treated as string including '' >>> x "'10'" In Python 3 >>> x = input("something:") something:10 >>> x '10' >>> x = input("something:") something:'10' #entered data treated as string with or without '' >>> x "'10'" >>> x = raw_input("something:") # will result NameError Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> x = raw_input("something:") NameError: name 'raw_input' is not defined
-
整数除法
在 Python 2 中,两个整数相除的结果四舍五入为最接近的整数。结果,3/2 将显示 1。为了获得浮点除法,分子或分母必须显式用作 float。因此,3.0/2 或 3/2.0 或 3.0/2.0 将导致 1.5Python 3 默认将 3 / 2 计算为 1.5,这对于新程序员来说更直观。 -
Unicode 表示
如果您想将字符串存储为 Unicode,Python 2 要求您用 au 标记它。默认情况下,Python 3 将字符串存储为 Unicode。我们有 Unicode (utf-8) 字符串和 2 个字节类:字节和字节数组。 -
xrange() 函数已删除
在 Python 2 中,range() 返回一个列表,而 xrange() 返回一个对象,该对象只会在需要时生成范围内的项目,从而节省内存。在 Python 3 中,range() 函数被删除,xrange() 已重命名为 range()。此外,range() 对象支持 Python 3.2 及更高版本中的切片。 -
引发异常
Python 2 接受两种表示法,即“旧”和“新”语法;如果我们没有将异常参数括在括号中,Python 3 会引发 SyntaxError。raise IOError, "file error" #This is accepted in Python 2 raise IOError("file error") #This is also accepted in Python 2 raise IOError, "file error" #syntax error is raised in Python 3 raise IOError("file error") #this is the recommended syntax in Python 3
-
异常中的参数
在 Python 3 中,异常参数应使用“as”关键字声明。except Myerror, err: # In Python2 except Myerror as err: #In Python 3
-
next() 函数和 .next() 方法
在 Python 2 中,允许将 next() 作为生成器对象的方法。在 Python 2 中,用于遍历生成器对象的 next() 函数也被接受。然而,在 Python 3 中,next(0 作为生成器方法已停止并引发AttributeError.gen = (letter for letter in 'Hello World') # creates generator object next(my_generator) #allowed in Python 2 and Python 3 my_generator.next() #allowed in Python 2. raises AttributeError in Python 3
-
2to3效用
与 Python 3 解释器一起,2to3.py 脚本通常安装在 tools/scripts 文件夹中。它读取 Python 2.x 源代码并应用一系列修复程序将其转换为有效的 Python 3.x 代码。Here is a sample Python 2 code (area.py): def area(x,y = 3.14): a = y*x*x print a return a a = area(10) print "area",a To convert into Python 3 version: $2to3 -w area.py Converted code : def area(x,y = 3.14): # formal parameters a = y*x*x print (a) return a a = area(10) print("area",a)