Выходит ли Python как продолжение?

Я согласен с ответом от zacherates.

Но вы можете сделать вызов intern () в ваших нелиберальных строках.

Из примера zacherates:

// ... but they are not the same object
new String("test") == "test" ==> false 

Если вы ставите нелитеральное равенство строки, это правда

new String("test").intern() == "test" ==> true 
13
задан 345871345 18 July 2010 в 17:34
поделиться

5 ответов

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

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

list(f())

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

16
ответ дан 1 December 2019 в 17:42
поделиться

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

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
0
ответ дан 1 December 2019 в 17:42
поделиться

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

def function():
    yield 1
    yield 2

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

12
ответ дан 1 December 2019 в 17:42
поделиться

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

3
ответ дан 1 December 2019 в 17:42
поделиться

Вместо использования оператора 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

Это кажется слишком большим более читаемый для меня

16
ответ дан 1 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: