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

打印功能

Python 3 中最显着和最广为人知的变化是打印函数的使用方式。现在必须将括号 () 与打印功能一起使用。它在 Python 2 中是可选的。

print "Hello World" #Python 2
print ("Hello World") # Python 3, print 后面必须跟着 ()

默认情况下,print() 函数在末尾插入一个新行。在 Python 2 中,可以通过在末尾放置 ',' 来抑制它。在 Python 3 中,"end =' '" 附加空格而不是换行符。

print x,           #  Python 2
print(x, end=" ")  # 在打印的字符串末尾追加一个空格,而不是换行符  Python3

从键盘读取输入

Python 2 有两个可以读取输入的函数,input()raw_input()。如果接收到的数据包含在引号 '' 或 "" 中,则 input() 函数将接收到的数据视为字符串,否则将数据视为数字。

在 Python 3 中,不推荐使用 raw_input() 函数。此外,接收到的数据始终被视为字符串。

In Python 2

>>> x = input('something:') 
something:10 #被视为整数
>>> x
10

>>> x = input('something:')
something:'10' #被视为字符串
>>> x
'10'

>>> x = raw_input("something:")
something:10 #输入的内容不带有引号,则被视为整数
>>> x
'10'

>>> x = raw_input("something:")
something:'10' # 输入的内容带有引号,则被视为字符串
>>> x
"'10'"

In Python 3

>>> x = input("something:")
something:10
>>> x
'10'

>>> x = input("something:")
something:'10' # 不管有没有引号,都将被视为字符串
>>> x
"'10'"

>>> x = raw_input("something:") # 将会产生 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。为了获得浮点除法,分子或分母必须明确用作浮点数。例如,3.0/2 或 3/2.0 或 3.0/2.0,这种除法才会显示 1.5

Python 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" # 在Python 2中被允许
raise IOError("file error") #在 Python 2 也被允许
raise IOError, "file error" #在 Python 3 产生语法错误
raise IOError("file error") #在 Python 3 中被推荐

异常中的参数

在 Python 3 中,异常的参数应该用 'as' 关键字声明。

except Myerror, err: # Python2
except Myerror as err: # Python 3

next() 函数和 .next() 方法

在 Python 2 中,允许 next() 作为生成器对象的方法。在 Python 2 中,也接受了 next() 函数,用于迭代生成器对象。但是,在 Python 3 中, next() 作为生成器方法已停止使用并引发AttributeError。

gen = (letter for letter in 'Hello World') # 创建生成器对象
next(my_generator) # Python 2 和 Python 3
my_generator.next() #在 Python 2允许. 在 Python 3中引发错误

2to3 实用程序

与 Python 3 解释器一起,2to3.py 脚本通常安装在 tools/scripts 文件夹中。它读取 Python 2.x 源代码并应用一系列修复程序将其转换为有效的 Python 3.x 代码。

下面是一个简单的 Python 2 代码段 (area.py):

def area(x,y = 3.14): 
   a = y*x*x
   print a
   return a

a = area(10)
print "area",a

转换成python3 版本的代码段

$2to3 -w area.py

转换后的代码如下 :

def area(x,y = 3.14): # formal parameters
   a = y*x*x
   print (a)
   return a

a = area(10)
print("area",a)

查看笔记

扫码一下
查看教程更方便