/ Python

Python 3 学习

之前一直都是用的 Python 2,不过随着 Python 3 越来越成熟,最近决定在新项目中全面使用 Python 3。

这里总结一下 Python 2 和 Python 3 之间的主要区别。

输入

Python 2

a = input('enter a number: ') # 输入 123
type(a) # <type 'int'>

b = raw_input('enter a number: ') # 输入 123
type(b) # <type 'str'>

Python 3

a = input('enter a number: ') # 输入 123
type(a) # <type 'str'>

b = eval(input('enter a number: ')) # 输入 123
type(b) # <type 'int'>

注:

Python 2 的 raw_input() 等价于 Python 3 中的 input()

Python 2 的 input() 等价于 Python 3 中的 eval(input())

输出

Python 2

print 'Python', python_version() 
print 'Hello, World!'
print('Hello, World!') # Python 2.7+

Python 3

print('Python', python_version())
print('Hello, World!')

整除

Python 2

print '3 / 2 =', 3 / 2  # 1
print '3 // 2 =', 3 // 2  # 1.5
print '3 / 2.0 =', 3 / 2.0  # 1.5
print '3 // 2.0 =', 3 // 2.0  # 1.0

Python 3

print '3 / 2 =', 3 / 2  # 1.5
print '3 // 2 =', 3 // 2  # 1
print '3 / 2.0 =', 3 / 2.0  # 1.5
print '3 // 2.0 =', 3 // 2.0  # 1.0

Unicode

Python 2

s = '你好啊'
type (s) # <type 'str'>

s = u'你好啊'
type (s) # <type 'unicode'>

Python 3

s = '你好啊'
type (s) # <type 'str'>

s = u'你好啊'
type (s) # <type 'str'>

Range

Python 2

n = 100
for i in range(n):
    pass

type(range(n)) # <type 'list'>

for i in xrange(n):
    pass   

type(xrange(n)) # <type 'xrange'>

Python 3

n = 100
for i in range(n):
    pass

type(range(n)) # <class 'range'>
# 如果需要转成 list,则使用
list(range(n))

注: Python 3 中没有 xrange(n) 方法,它的 range(n) 在功能上与 Python 2 中的 xrange(n) 相同。

异常

Python 2

raise IOError, "some error"  

Python 3

raise IOError("some error")

Python 2

try:
    # some actions
except IOError, err:
    # do sth 

Python 3

try:
    # some actions
except IOError as err:
    # do sth

Next

Python 2

g = (i for i in xrange(5))
next(g) # Python 2.7+
g.next() 

Python 3

g = (i for i in range(5))
next(g)

舍入规则

Python 2

# 四舍五入
round(1.5) # 2
round(2.5) # 3

Python 3

# 四舍六入五留双
# 舍入位之后的尾数逢五的话看前一位,奇进偶不进
round(1.5) # 2
round(2.5) # 2

参考资料:
The key differences between Python 2.7.x and Python 3.x with examples