1. print 输出
Python2 打印输出 print 是一条语句,带不带括号输出均可
Python3 改为 print()函数,因此必须使用括号
兼容性方式:
统一使用括号方式进行打印 print(something)
2. input 输入
Python2 支持 raw_input(返回字符串对象)和 input(返回数字和字符串)两种输入函数
Python 仅支持 input 函数
兼容性方式:
统一使用 input 函数进行输入处理
3.不等于
Python2 支持使用<>和!=表示不等于
Python3 只支持使用!=表示不等于
兼容性方式:
统一使用!=表示不等于
4.类定义
Python2 同时支持新式类(object)和老式类
Python3 统一使用新式类并且只有新式类可以应用多重继承
兼容性方式:
统一使用新式类
5.缩进语法
Python2 可以混合使用 tab 和 space 两种方式进行缩进(1tab=8space),有 IDE 可能不支持
Python3 仅可使用 tab 作为缩进,混用会触发异常
兼容性方式:
统一使用 tab 作为缩进
6.模块导入
Python2 导入一个模块时首先搜索当前目录(自定义模块),再搜索环境变量路径
Python3 仅会搜索环境变量路径,当需要自定义模块时使用绝对或相对路径来进行导入
兼容性方式:
统一使用绝对路径进行自定义模块导入
7.编码类型
Python2 默认使用 ASCII 字符编码,使用 Unicode 时需要进行字符转换
Python3 默认使用 Unicode 字符编码
兼容性方式:
所有字符串赋值均使用前缀 u(推荐方式),或者引入 unicode_literals 模块
s1 = u'ILovePython2'
s2 = u'ILovePython3'
或者
from __future__ import unicode_literals
s1 = 'ILovePython2'
s2 = 'ILovePython3'
8.抛出异常
Python2 支持 2 种异常触发方式
raise IOError, "file error" # Old
raise IOError("file error") # New
Python3 支持带括号方式
兼容性方式:
统一使用带括号方式处理异常
9.异常处理
Python2 支持 2 种异常处理方式
except SomeError, err:
except SomeError as err:
Python3 强制要求使用 as 关键字的方式
兼容性方式:
统一使用 as 关键字的异常处理方式
10. 文件操作
Python2 支持使用 file 和 open 两个函数来进行文件操作
Python3 只支持使用 open 函数来进行文件操作
兼容性方式:
统一使用 open 函数来进行文件操作
11. 整数类型
Python2 整数类型可以细分为短整形 int,长整形 long
Python3 废除了短整形,使用 int 表示长整形
兼容性方式:
from future.builtins import int
bigint = int(100000000)
12. 整数除法
Python2 除法/,进行整数除法时截除小数部分返回整数,进行浮点数除法时返回浮点数
Python3 除法/表示真除,截除小数部分的除使用//表示
兼容性方式:
当需要截除小数部分时统一使用//
if 2 // 3 == 0:
something
13. 不同数据类型比较
Python2 能够支持两个不同数据类型并不相同的对象进行比较
Python3 修正了这种非法比较,会抛出 TypeError 异常
兼容性方式:
禁止不同数据类型的非法比较
14. 列表推导式的变量作用域泄露
Python2 列表推导式的变量会泄露到全局作用域
i = 1
print('%s' % [i for i in range(5)])
print('after: i = %s' %i)
# 输出
[0, 1, 2, 3, 4]
after: i = 4
全局变量 i 本该为 1
Python3 修正了这种错误
兼容性方式:
全局变量大写与局部变量不要同名
15. 列表迭代器生成函数
Python2 支持使用 range 和 xrange 函数生成迭代器对象,前者返回列表后者返回迭代对象
Python3 只支持 range,但返回的是迭代对象
兼容性方式:
统一使用 range 函数
要求 range 返回是列表进行一次转换
list(range(1,10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
16. 迭代器迭代函数
Python2 支持使用内置函数 next 和迭代对象的.next()实例方法来获取迭代对象的下一个元素
Python3 使用 next 内置函数获取下一个元素,自定义迭代器要实现__next__特殊方法
兼容性方式:
几乎很少使用,推荐统一使用__next__特殊方法
from future.builtins import object
class Upper(object):
def __init__(self, iterable):
self._iter = iter(iterable)
def __next__(self):
return next(self._iter).upper()
def __iter__(self):
return self