【发布时间】:2014-11-30 19:17:20
【问题描述】:
我需要在 Python 2.4 中从 itertools 模拟 izip_longest
import itertools
class Tools:
@staticmethod
def izip_longest(*args, **kwds):
# izip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-
fillvalue = kwds.get('fillvalue')
counter = [len(args) - 1]
def sentinel():
if not counter[0]:
raise ZipExhausted
counter[0] -= 1
yield fillvalue
fillers = itertools.repeat(fillvalue)
iterators = [itertools.chain(it, sentinel(), fillers) for it in args]
try:
while iterators:
yield tuple(map(next, iterators))
except ZipExhausted:
pass
class ZipExhausted(Exception):
pass
一切正常,直到我到达yield tuple(map(next, iterators));
Python 2.4 抛出了一个
NameError: global name 'next' is not defined
错误并退出。
我可以用什么来代替next 使izip_longest 在Python 2.4 中运行?
或者 Python 2.4 中是否有任何其他函数返回与 izip_longest() 相同的结果?
【问题讨论】:
-
出于好奇,您为什么要使用具有静态方法的类?为什么不把它变成一个函数呢?
-
有些相关(不完全重复):stackoverflow.com/q/25810855/1639625
标签: python next itertools python-2.4