Объекты итератора в Python соответствуют протоколу итератора, который в основном означает, что они предоставляют два метода: __iter__()
и __next__()
. __iter__
возвраты итератор возражает, и неявно назван в начале циклов. __next__()
метод возвращает следующее значение и неявно назван в каждом инкременте цикла. __next__()
повышения исключение StopIteration, когда больше нет значения для возврата, который неявно получен конструкциями цикличного выполнения, чтобы прекратить выполнять итерации.
Вот простой пример счетчика:
class Counter:
def __init__(self, low, high):
self.current = low
self.high = high
def __iter__(self):
return self
def __next__(self): # Python 2: def next(self)
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
for c in Counter(3, 8):
print c
Это распечатает:
3
4
5
6
7
8
Это легче записать использование генератора, как покрыто в предыдущий ответ:
def counter(low, high):
current = low
while current <= high:
yield current
current += 1
for c in counter(3, 8):
print c
печатный вывод будет тем же. Под капотом объект генератора поддерживает протокол итератора и делает что-то примерно подобное классу Счетчик.
статья David Mertz, Итераторы и Простые Генераторы , является довольно хорошим введением.
Это не должно работать. Вы должны поместить массив в аннотацию как константу. Даже если вы справитесь с этой проблемой, компилятор ее отклонит. Что вам нужно сделать, так это:
@RunWith(Suite.class)
@Suite.SuiteClasses({MyTest.class, MyOtherTest.class})
public static class TestSuite {
}
Обратите внимание на волнистые скобки.
Я уверен, что вы пытаетесь получить возможность динамически создавать список классов в пакете.
Я отправил запрос к ним, чтобы разрешить это, но пока единственный способ сделать это - создать подкласс класса Suite следующим образом:
public class DynamicSuite extends Suite {
public DynamicSuite(Class<?> setupClass) throws InitializationError {
super(setupClass, DynamicSuiteBuilder.suite());
}
}
@RunWith(DynamicSuite.class)
public class DynamicSuiteBuilder {
public static Class[] suite() {
//Generate class array here.
}
}