创建一个反转迭代器的函数
Creating a function which reverses iterator
我这样做是为了更好地理解 iter()
和 next()
方法。
所以我知道这可以使用一些内置插件轻松完成:
>>>animal = 'cat'
>>>print(list(reversed(animal)))
['t','a','c']
但这也可以通过创建一个 class 可迭代对象来完成:
class Reverselist():
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index =self.index -1
return self.data[self.index]
def intolist(self):
self.test = [i for i in self]
return self.test
rev = Reverselist('cat')
print(rev.intolist())
['t','a','c']
但是,我在做同样的事情时遇到了一些麻烦,但使用函数而不是走 OOO 路线。
有没有一种方法可以使用 iter()
和 next()
方法对函数执行此操作,而不必求助于理解和循环?
您可以使用 generator function:
def reverse_list(seq):
for index in range(len(seq)-1, -1, -1):
yield seq[index]
调用此函数将生成支持 iter()
和 next()
的 "generator object"。
>>> rev = reverse_list('cat')
>>> rev
<generator object reverse_list at 0x10a93ebe0>
>>> next(rev)
't'
我这样做是为了更好地理解 iter()
和 next()
方法。
所以我知道这可以使用一些内置插件轻松完成:
>>>animal = 'cat'
>>>print(list(reversed(animal)))
['t','a','c']
但这也可以通过创建一个 class 可迭代对象来完成:
class Reverselist():
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index =self.index -1
return self.data[self.index]
def intolist(self):
self.test = [i for i in self]
return self.test
rev = Reverselist('cat')
print(rev.intolist())
['t','a','c']
但是,我在做同样的事情时遇到了一些麻烦,但使用函数而不是走 OOO 路线。
有没有一种方法可以使用 iter()
和 next()
方法对函数执行此操作,而不必求助于理解和循环?
您可以使用 generator function:
def reverse_list(seq):
for index in range(len(seq)-1, -1, -1):
yield seq[index]
调用此函数将生成支持 iter()
和 next()
的 "generator object"。
>>> rev = reverse_list('cat')
>>> rev
<generator object reverse_list at 0x10a93ebe0>
>>> next(rev)
't'