如何使用iter(v,w)函数?

时间:2014-04-04 06:49:48

标签: python iterator

我正在研究iter(),在其官方文档中,它说我可以做它(v,w),所以iter()将调用v直到它返回值w,然后它停止。

但是我尝试了半小时,但仍然无法找到可以返回多个结果的函数。

这是我的代码,我希望它返回1,2,3,4,5:

def x():
    for i in range(10):
        return i

a = iter(x, 5)
a.next()

我知道当我回到i时,我实际上是退出了这个功能。

可能无法多次为函数返回结果。

但是我应该如何使用函数使iter(x,5)正常工作?

3 个答案:

答案 0 :(得分:5)

iter()每次都会调用函数。您的函数在每次调用时返回相同的值(range(10)列表中的第一个数字)。

您可以更改函数以使用全局来说明具有两个参数的iter()如何工作:

i = 0
def f():
    global i
    i += 1
    return i

for x in iter(f, 5):
    print x

现在每次调用f()时,都会返回一个新号码。您也可以使用默认参数,或者在该实例上使用状态和方法的实例。只要该函数在多次调用时返回不同的 ,它就适合iter(a, b)用例。

带有两个参数的

iter()通常使用方法调用,其中实例的状态随每次调用而变化。文件对象上的.readline()方法,例如:

for line in iter(fileobject.readline, ''):

它的工作方式与直接迭代fileobject iterable完全相同,只是它不会使用内部文件迭代缓冲区。这有时可能是一项要求(有关文件迭代缓冲区的更多信息,请参阅file.next() method。)

您当然可以传递lambda功能:

for chunk in iter(lambda: fileobject.read(2048), ''):

现在我们正在读取的文件对象是最多2048字节的块而不是逐行。

答案 1 :(得分:0)

在@Martjin Pieters的回答之后,我有了这个主意。

这是我编写的代码片段,它可以正确使用iter(v,w):

import random

def x():
    return random.randrange(1,10)

a = iter(x,5)

while True:
    print a.next()

在这段代码中,a.next()将从x()返回一个get值,直到x()返回5,然后它将停止。

答案 2 :(得分:0)

您还可以通过yield关键字使用生成器功能。例如:

def x():
    for i in range(10):
        yield i