对于只能迭代一次的集合,什么是好的API?

2024-05-17 03:42:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是一个只能迭代一次的集合(我认为,源于这个集合如何代理通过分页网络API返回的搜索结果)

目前的行为是,如果第二次尝试迭代,新的迭代器的行为就好像集合是空的一样

我觉得这有点不对;如果有例外的话我会更舒服

我找不到任何章节或诗句表明这里有什么正确的惯例。有吗


Tags: 网络api代理诗句章节我会惯例
3条回答

首先,您应该看看pep255(https://www.python.org/dev/peps/pep-0255/

只能迭代一次的集合是生成器。生成器会导致StopIteration,一旦它没有任何剩余项,这实际上就是一个例外。大多数时候(基本上总是)您不关心StopIteration异常,因为它是由您的迭代方法处理的

你正在使用生成函数,这就是为什么你会得到这种类型的结果

如果要存储函数/api输出,只需执行copy()操作

例如

def func(l):
    for i in l:
        yield i

l=[i for i in range(1,100)]
p=func(l)

print(list(p))
print(list(p))


k=list(func(l)).copy() #solution to problem
print(k)
print(k)

以上是问题的示例

它不是一个API,而是一个称为“生成器”的编程功能,在Python中,它被称为yield

What does the "yield" keyword do?

yield是一个与return类似的关键字,但函数将返回一个生成器

>>> def createGenerator():
...    mylist = range(3)
...    for i in mylist:
...        yield i*i
...
>>> mygenerator = createGenerator() # create a generator
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...     print(i)
0
1
4

这是一个没用的例子,但是当你知道你的函数将返回一个巨大的值集,你只需要读一次,它就很方便了。 要掌握yield,必须了解调用函数时,函数体中编写的代码不会运行。函数只返回generator对象,这有点棘手:-)

最初的答案是e-satis

相关问题 更多 >