我正在研究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)正常工作?
答案 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