在许多语言中,我们可以做类似的事情:
for (int i = 0; i < value; i++)
{
if (condition)
{
i += 10;
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中做同样的事情?以下(当然)不起作用:
for i in xrange(value):
if condition:
i += 10
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
i = 0
while i < value:
if condition:
i += 10
i += 1
Run Code Online (Sandbox Code Playgroud)
但我想知道在Python中是否有更优雅(pythonic?)的方式.
我有一个下面的迭代器容器的虚拟示例(真正的读取文件太大而不适合内存):
class DummyIterator:
def __init__(self, max_value):
self.max_value = max_value
def __iter__(self):
for i in range(self.max_value):
yield i
def regular_dummy_iterator(max_value):
for i in range(max_value):
yield i
Run Code Online (Sandbox Code Playgroud)
这允许我多次迭代该值,以便我可以实现这样的事情:
def normalise(data):
total = sum(i for i in data)
for val in data:
yield val / total
# this works when I call next()
normalise(DummyIterator(100))
# this doesn't work when I call next()
normalise(regular_dummy_iterator(100))
Run Code Online (Sandbox Code Playgroud)
如何检查normalize函数,我正在传递一个迭代器容器而不是一个普通的生成器?