Python 3 与 Python 2 的区别
Python 3 在设计时, 为了不带上太多历史包袱, 所以没有考虑完全的向下兼容. 因此, 早期的 Python 代码无法在 Python 3 上运行.
为了平稳过渡, 官方将 Python 2.6 作为过渡版本, 沿用 Python 2 的语法和库的同时, 允许 2.6 版本使用部分的 Python 3 语法与函数.
- 对于新程序, 建议使用 Python 3
- 对于旧程序, 建议按照下面的规则改写成 Python 3
如果暂时无法使用 3, 建议使用 Python 2.6, 编写兼容于 Python 3 的程序
默认编码
Python 2 默认编码是 ASCII. 因为中文版的 Windows 操作系统使用的是 GBK 编码, 所以 Python 2 程序中的中文在 Windows 终端中会显示乱码. 如果需要使用中文字符串:
需要在开头声明 UTF-8 编码: #coding:utf-8, 等于告诉操作系统”不要使用系统默认的编码表, 而是使用 UTF-8 编码表来解码”
- 如果碰到中文字符串, 则使用 decode(‘utf-8’) 解码成 Unicode 万国码 Python3 已经将默认编码改为 Unicode, 所以不存在乱码问题, 可以方便地使用中文字符串, 不需要转化.
数据类型
Python 3 去除了 long 类型, 现在只有一种整型 — int, 其实它的行为就像 Python 2 版本的 long 类型.
八进制
Python 3 中, 表示八进制字面量的方式只有一种, 就是0o1000, 原来 Python 2 支持的 01000 形式不能用了.
0o1000 中的 o = octal / 八进制
# Python 2 中
0o1000 # → 512
01000 # → 512
# Python 3 中
0o1000 # → 512
01000 # 报错, SyntaxError
除法
Python 中的除法有 2 个运算符: /
和 //
- 在 Python 2 中
/
除法跟我们熟悉的大多数语言一样 (比如 Java 和 C): - 整数相除的结果是一个整数, 把小数部分完全忽略掉
- 浮点数地除法会保留小数点的部分, 得到一个浮点数的结果
- 在 Python 3 中
/
除法不再这么做了, 对于整数之间的相除, 结果也会是浮点数 ```python在 Python 2 中
1 / 2 # → 0 1.0 / 2.0 # → 0.5
```python
# 在 Python 3 中
1 / 2 # → 0.5
1.0 / 2.0 # → 0.5
不等于
Python 2 中不等于有 2 种写法:
!=
和<>
Python 3 中去掉了
<>
, 只有!=
这一种写法
print 函数
print
语句没有了, 取而代之的是print()
函数
# 在 Python 2.6 中, 以下 2 种形式是等价的
# 注意,如果没有导入 __future__ 包, 这里的 print() 函数不能使用其他参数
print "Hello" #语句
print ("Hello") #函数
# 如果导入 __future__ 包, 就可以使用 3.x 完整的函数语法, 但是 print 语句被禁止使用
from __future__ import print_function
print("Hello", "World", sep=', ') # → Hello, World
print "Hello" # 报错
range 函数
- 在 Python 2 中, 用 xrange() 创建迭代对象的用法非常流行. 比如, 用在 for 循环、列表、集合、字典
- 在 Python 3 中, range() 的功能完全替代了 xrange(), 所以 xrange() 这个专门函数被取消. 如果在 Python 3 中使用 xrange()会抛出命名异常
异常
- 在 Python 3 中使用 as 作为关键词. 捕获异常的语法从 except exc var 改为 except exc as var. 且 except (exc1, exc2) as var 可以同时捕获多种类别的异常. Python 2.6 支持这两种语法
- 在 Python 2 中, 所有类型的对象都是可以被直接抛出的. 在 Python 3 中, 只有继承自 BaseException 的对象才可以被抛出
- Python 2 中 raise 语句使用逗号将抛出对象类型和参数分开, Python 3 取消了这种奇葩的写法, 直接调用构造函数抛出对象即可
- 在 Python 2 中, 异常在代码中除了表示程序错误, 还经常做一些普通控制结构应该做的事情. 在 Python 3 中可以看出, 设计者让异常变的更加专一, 只有在错误发生的情况才能用异常捕获语句来处理