我在研究iter(),在它的官方文档中,它说我可以做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) 正常工作呢?
最佳答案
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
可迭代对象完全一样,只是它不使用内部文件迭代缓冲区。这有时可能是一项要求(有关文件迭代缓冲区的更多信息,请参阅 file.next()
method)。
当然你也可以传入一个 lambda
函数:
for chunk in iter(lambda: fileobject.read(2048), ''):
现在我们读取的文件对象是最多 2048 字节的 block ,而不是逐行读取。
关于python - 如何将 iter(v,w) 与函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22855550/