Можно ли вызвать функцию, обработать некоторые ее условные выражения, выйти из нее, вызвать ее снова и получить ее с того места, где она остановилась? - PullRequest
0 голосов
/ 04 февраля 2012

Если у меня есть:

def foo(x):

    if x == y:
        blah
    elif x == z:
        blah1
    if x == y:
        blah2
    elif x == a:
        blah3
    if x == y:
        blah
    elif x == y:
        blah4
    if x == b:
        blah5
    elif x == c:
        blah6

Могу ли я выйти, скажем, в конце третьего условия, выполнить какую-то другую обработку и затем запустить эту функцию с того места, где она была прервана, когда я вызову ее снова?

1 Ответ

6 голосов
/ 04 февраля 2012

Как говорит Вубл, вы можете использовать генератор для этого, по крайней мере, если я понимаю, что вы хотите. Я видел это несколько раз в дикой природе, но довольно редко.

def foo(x):
    if x == 6:
        print 'six'
    elif x == 3:
        print 'three'
    yield
    if x > 4:
        print 'greater than four'
    else:
        print 'not greater than four'
    yield

можно произвести

>>> f = foo(6)
>>> f
<generator object foo at 0x1004b25a0>
>>> next(f)
six
>>> next(f)
greater than four
>>> next(f)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

Возможно, есть лучший способ сделать то, что ты хочешь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...