Python2 和 Python3 兼容性编程总结

2023-11-12

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python2 和 Python3 兼容性编程总结 的相关文章

随机推荐