Code Explaination: Spelling correction code
Drew
olsonas at gmail.com
Thu Apr 12 16:17:27 EDT 2007
On Apr 12, 10:28 am, Steven Bethard <steven.beth... at gmail.com> wrote:
> Drew wrote:
> > On Apr 11, 11:27 pm, Steven Bethard <steven.beth... at gmail.com> wrote:
> >> Drew wrote:
> >>> def known_edits2(word):
> >>> return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in
> >>> NWORDS)
>
> >> This is the same as:
>
> >> result = set()
> >> for e1 in edits1(word):
> >> for e2 in edits1(e1):
> >> if e2 in NWORDS:
> >> result.add(e2)
> >> return result
>
> >> The thing between the ``set(`` and ``)`` is called a generator
> >> comprehension if you'd like to look into it further.
>
> > Thanks for the response. I'm somewhat familiar with generator/list
> > comprehension but was unsure how multiple statements were evaluated
> > when chained together. From your explanation, I'm assuming they are
> > evaluated from the "inside out" rather than left to right or right to
> > left.
>
> > Does the mean that the comprehension on the inside is always evaluated
> > first?
>
> Not really (at least for the most literal interpretation of ``evaluated
> first``). I find it easiest to think of translating them into regular
> for loops by adding the appropriate indentation.
>
> Starting with:
>
> (e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)
>
> Adding newlines:
>
> (e2
> for e1 in edits1(word)
> for e2 in edits1(e1)
> if e2 in NWORDS)
>
> Adding indentation:
>
> (e2
> for e1 in edits1(word)
> for e2 in edits1(e1)
> if e2 in NWORDS)
>
> Moving the add/append to the bottom:
>
> for e1 in edits1(word)
> for e2 in edits1(e1)
> if e2 in NWORDS
> e2
>
> Adding the remaining boiler-plate:
>
> result = set()
> for e1 in edits1(word):
> for e2 in edits1(e1):
> if e2 in NWORDS:
> result.add(e2)
>
> So multiple for- and if-expressions are evaluated in the same order that
> they would normally be in Python, assuming the proper whitespace was added.
>
> HTH,
>
> STeVe
Wow, thanks for having the patience to write that out. This makes
perfect sense now.
-Drew
More information about the Python-list
mailing list