gpt4 book ai didi

python - 我可以用什么代替 python 2.4 中的 next()

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:05 25 4
gpt4 key购买 nike

我需要在 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() 相同的结果?

最佳答案

next() function被添加到 Python 2.6。使用迭代器中的 next 方法代替:

while iterators:
yield tuple([it.next() for it in iterators])

或者定义你自己的next()函数;您没有使用 default 参数,因此对于更简单的情况:

def next(it):
return it.next()

但是完整版应该是:

_sentinel = object()

def next(it, default=_sentinel):
try:
return it.next()
except StopIteration:
if default is _sentinel:
raise
return default

关于python - 我可以用什么代替 python 2.4 中的 next(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26217771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com