How to keep a function as a generator function when the yield operator is moved into its sub-functions??
Miles Kaufmann
milesck at umich.edu
Tue Jul 14 14:24:06 EDT 2009
On Jul 14, 2009, at 2:03 PM, weafon wrote:
> Hi guys,
>
> I have a question about the usage of yield. As shown in the below
> example, in general, if there is a code segment commonly used by two
> or more functions, we may isolate the segment into a function and
> then call it from other functions if necessary.
>
> def func1():
> ....
> while(cond):
> .....
> commoncode()
> ...
>
>
> def func2():
> ....
> while(cond):
> .....
> commoncode()
> ...
>
> def commoncode()
> AAAA
> BBBB
> CCCC
>
> However, if there is a 'yield' operation in the common code segment,
> the isolation causes that func1 and func2 become a non-generator
> function!! Although I can prevent such an isolation by just
> duplicating the segment in func1 and func2 to keep both of them
> being generator functions, the code may become ugly and hard to
> maintain particularly when coomoncode() is long.
>
> The problem may be resolved if I can define the commoncode() as an
> inline function or marco. Unfortunately, inline and marco do not
> seems to be implemented in python. Thus, how can I isolate a common
> segment into a function when there are yield operations in the
> common segment?
def func1():
...
while cond:
...
for x in commoncode():
yield x
...
See also:
- PEP 380: http://www.python.org/dev/peps/pep-0380/
- Stackless: http://www.stackless.com/
-Miles
More information about the Python-list
mailing list