[Python-Dev] PEP for Better Control of Nested Lexical Scopes

Steven Bethard steven.bethard at gmail.com
Tue Feb 21 22:47:42 CET 2006


On 2/21/06, Josiah Carlson <jcarlson at uci.edu> wrote:
> The question which still remains in my mind, which I previously asked,
> is whether the use cases are compelling enough to warrant the feature
> addition.

I don't know whether I support the proposal or not, but in reading
Mark Russel's email, I realized that I just recently ran into a use
case:

----------------------------------------------------------------------
# group tokens into chunks by their chunk labels
token_groups = []
curr_suffix = ''
curr_tokens = []
for token in document.IterAnnotations('token', percent=80):
    label = token[attr_name]

    # determine the prefix and suffix of the label
    prefix, suffix = label[0], label[2:]

    # B labels start a new chunk
    if prefix == 'B':
        curr_suffix = suffix
        curr_tokens = [token]
        token_groups.append((curr_suffix, curr_tokens))

    # I labels continue the previous chunk
    elif prefix == 'I':
        if curr_suffix == suffix:
            curr_tokens.append(token)
        # error: change in suffix - this should be a B label
        else:
            # log the error
            message = '%r followed by %r'
            last_label = curr_tokens[-1][attr_name]
            self._logger.info(message % (last_label, label))
            # start a new chunk
            curr_suffix = suffix
            curr_tokens = [token]
            token_groups.append((curr_suffix, curr_tokens))

    # O labels end any previous chunks
    elif prefix == 'O':
        curr_suffix = suffix
        curr_tokens = [token]
----------------------------------------------------------------------

You can see that the code::

        curr_suffix = suffix
        curr_tokens = [token]
        token_groups.append((curr_suffix, curr_tokens))

is repeated in two places.  I would have liked to factor this out into
a function, but since the code requires rebinding curr_suffix and
curr_tokens, I can't.  I'm not sure I care that much -- it's only
three lines of code and only duplicated once -- but using something
like ``curr_suffix :=`` or Phillip J. Eby's suggestion of
``.curr_suffix =`` would allow this code to be factored out into a
function.

STeVe
--
Grammar am for people who can't think for myself.
        --- Bucky Katt, Get Fuzzy


More information about the Python-Dev mailing list