2012-02-04 5 views
-2

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

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 

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

+5

Я отформатировал ваш «код» для вас, но мне все еще не имеет смысла. Все условия одинаковы. Какова реальная проблема, которую вы пытаетесь решить? – Johnsyweb

+1

Я * думаю * вы ищете генераторную функцию, но это довольно непонятно, о чем вы говорите. – geoffspear

+2

Непонятно, какую проблему вы пытаетесь решить. Дайте нам пример практического кода из вашей программы, чтобы мы могли видеть его в контексте. –

ответ

6

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

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 

Там, наверное, лучший способ сделать то, что вы хотите сделать, хотя.

+0

Я просто печатал что-то похожее на это. [PEP 255] (http://www.python.org/dev/peps/pep-0255/) также может предоставлять контекст и фон в генераторах. – Makoto

+0

Вот что я искал! Благодаря!! – Zack