Подтвердить что ты не робот

Предполагается ли выход python?

У меня есть цикл for, который проверяет ряд условий. На каждой итерации он должен давать выход только для одного из условий. Конечная доходность является значением по умолчанию, если ни одно из условий не является истинным. Должен ли я поместить продолжение после каждого блока урожаев?

def function():
    for ii in aa:
       if condition1(ii):
           yield something1
           yield something2
           yield something3
           continue

       if condition2(ii):
           yield something4
           continue

       #default
       yield something5
       continue
4b9b3361

Ответ 1

Вместо использования оператора continue я бы предложил использовать записи elif и else:

def function():
    for ii in aa:
       if condition1(ii):
           yield something1
           yield something2
           yield something3

       elif condition2(ii):
           yield something4

       else: #default
           yield something5

Это кажется мне более читаемым.

Ответ 2

НЕТ, выход не подразумевает продолжение, он только начинается в следующей строке, в следующий раз. Простой пример демонстрирует, что

def f():
    for i in range(3):
        yield i
        print i,

list(f())

Это печатает 0,1,2, но если выход будет продолжаться, он не будет

Ответ 3

yield в Python прекращает выполнение и возвращает значение. Когда итератор вызывается снова, он продолжает выполнение сразу после инструкции yield. Например, генератор, определенный как:

def function():
    yield 1
    yield 2

будет возвращать 1, затем 2 последовательно. Другими словами, требуется continue. Однако в этом случае elif и else, как описано в flashk, безусловно, являются правильными инструментами.

Ответ 4

continue пропускает оставшийся блок кода, но код кода после yield выполняется, когда next() снова вызывается на генераторе. yield действует как приостановка выполнения в определенной точке.

Ответ 5

Если что-то есть простое значение, а условия - проверки для равенства, я бы предпочел сделать этот поиск в словаре "case structure":

ii_dict={'a':('somethinga1','somethinga2','somethinga3'),'b':('somethingb1',)}
ii_default = ('somethingdefault',)
aa='abeabbacd'

def function():
    return (value
           for ii in aa
           for value in (ii_dict[ii] if ii in ii_dict else ii_default))

for something in function(): print something

Ответ 6

Этот путь более понятен, надеюсь, это поможет, также спасибо Anurag Uniyal.

def f():
    for i in range(3):
        yield i
        print(i+10)

list(f())

----------- после запуска ------------

10
11
12
[0, 1, 2]