VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python2 和 Python3 的区别及兼容技巧(5)

统一文件操作函数

P2 支持使用 file 和 open 两个函数来进行文件操作。

P3 则统一使用 open 来进行文件操作。

兼容技巧:

统一使用 open 函数。

1
2
3
4
# Python 2 only:
= file(pathname)
# Python 2 and 3:
= open(pathname)

统一列表迭代器生成函数

P2 支持使用 range 和 xrange 两个函数来生成可迭代对象,区别在于前者返回的是一个列表类型对象,后者返回的是一个类似生成器(惰性求值)的迭代对象,支持无限迭代。所以当你需要生成一个很大的序列时,推荐使用 xrange,因为它不会一上来就索取序列所需的所有内存空间。如果只对序列进行读操作的话,xrange 方法效率显然会更高,但是如果要修改序列的元素,或者往序列增删元素的话,那只能通过 range 方法生成一个 list 对象了。

 

P3 则统一使用 range 函数来生成可迭代对象,但其实 P3 的 range 更像是 P2 的 xrange。所以在 P3 中如果你想得到一个可以被修改的列表对象,你需要这么做:

1
2
list(range(1,10))
[123456789]

兼容技巧:

统一使用 range 函数

1
2
3
4
5
6
7
8
9
10
11
# Python 2 only:
for in xrange(10**8):
    ...
# Python 2 and 3: forward-compatible
from future.builtins import range
for in range(10**8):
    ...
# Python 2 and 3: backward-compatible
from past.builtins import xrange
for in xrange(10**8):
    ...

统一迭代器迭代函数

P2 中支持使用内置函数 next 和迭代器对象的 .next() 实例方法这两种方式来获取迭代器对象的下一个元素。所以,在实现自定义迭代器对象类时,必须实现 .next() 实例方法:

1
2
3
4
5
6
7
8
9
10
11
# Python 2 only
class Upper(object):
    def __init__(self, iterable):
        self._iter = iter(iterable)
    def next(self):          # Py2-styface iterator interface
        return self._iter.next().upper()
    def __iter__(self):
        return self
itr = Upper('hello')
assert itr.next() == 'H'     # Py2-style
assert list(itr) == list('ELLO')

相关教程