python - 如何将 iter(v,w) 与函数一起使用?

标签 python iterator

我在研究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/

相关文章:

python - 使用 Beautiful Soup、Python/Django 的 502 错误网关

python - 将带有回调的函数转换为 Python 生成器?

java - 添加到 ArrayList 对象的 ListIterator

C++ 无法访问由 vector 的迭代器返回的类中的公共(public)属性

c++ - 如何正确使用enable_if?

java - 使用迭代器删除条目的程序

python - "force"用户使用带有 argparse 的特定文件扩展名的最佳方法是什么?

python - django 如何知道已经运行了哪些迁移?

Python通过大于或等于每个子组中值的列值查找数据框中的记录

c# - 为什么在 C# 中进行基于模式的编程