New submission from Dávid Nemeskey:

Currently, the "as" keyword in supported in import and with statements to bind 
an object to a name. I think it would be nice to have the same functionality in 
list/dict/etc. comprehensions as well.

Rationale: as I understand, comprehensions are preferred over map/filter + 
lambdas for creating modified versions of sequences (etc.) in Python. They are 
indeed useful for replacing map, filter, or map(filter); however, filter(map) 
is currently not supported. This is not an unusual use-case, as the two 
examples below show. It is also evident that they are very wordy with lambdas, 
and could be much clearer with comprehensions:

    with open(file) as inf:
        lines = list(filter(lambda l: l, map(lambda line: line.strip(), inf)))
    items = dict(filter(lambda kv: kv[1] > 5,
                        map(lambda kv: kv[0], len(kv[1]), d.items())))

Currently the only way to do this with comprehensions are:

    with open(file) as inf:
        lines = [l for l in (line.strip() for line in inf) if l]
    items = {k: v for k, v in ((k, len(v)) for k, v in d.items()) if v > 5)}

, or

    items = {k: len(v) for k, v in d.items() if len(v) > 5}

The first option is as unwieldy and unreadable as the code with lambdas, while 
the second is ineffective as it calls len() twice (and of course here len() is 
just a placeholder for a potentially heavy operation).

I propose to allow the "as" keyword in comprehensions as well to bind the 
result of an operation in the output expression to a name that could be used in 
the optional predicate. In other words, provide a let-like functionality. Like 
so:

    with open(file) as inf:
        lines = [line.strip() as l for line in inf if l]
    items = {(k, len(v) as lenv) for k, v in d.items() if lenv > 5}

----------
messages: 294446
nosy: nemeskeyd
priority: normal
severity: normal
status: open
title: "as" keyword in comprehensions
type: enhancement

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue30471>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to