0
我注意到我都可以做,用相同的结果直接收集迭代,或用iterator
foo = """
this is
a multi-line string.
"""
for line in foo.splitlines():
pass
for line in iter(foo.splitlines())
pass
的区别是什么? 我应该选择哪一个?
我注意到我都可以做,用相同的结果直接收集迭代,或用iterator
foo = """
this is
a multi-line string.
"""
for line in foo.splitlines():
pass
for line in iter(foo.splitlines())
pass
的区别是什么? 我应该选择哪一个?
for
语句在您试图迭代的对象上隐式调用iter()
。然后第二种形式是多余的,两次做同样的工作,没有任何好处。
有可能是一个优势之前你循环存储iter()
迭代:
foo_iter = iter(foo.splitlines())
for line in foo_iter:
next_line = next(foo_iter, '')
print(next_line.rstrip())
print(line.rstrip())
在这种情况下,我认为这是最好使用while循环。 for循环意味着将每个元素逐个迭代给我。虽然我想在这个特定的例子中,将'foo.splitlines()'包装在一个生成器中,每个'next()'调用产生两个元素的元组也是可行的。 – Dunes 2014-10-31 14:04:01
@Dunes:不确定是否有担保。例如,当解析具有重复记录结构的文件时,我经常使用嵌套的for循环,例如,在行上迭代,直到检测到记录结束。使用'while'会使这些代码变得不必要的复杂。 – 2014-10-31 14:06:56
你会得到一个运行你的代码的stopIteration错误 – 2014-10-31 14:08:41