Hello Everyone,

If I've done this incorrectly, please let me know so that I can
improve/revise. I'm new to the Python community and quite enjoy the more
functional features of Python 3, but have I have a peeve about it. I'd like
to propose and discuss the following enhancement to Python 3:

*Consider the following trivial for-loop:*

chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0for a in chars:
     if a in seek:
          count += 1

Gross. Twice nested for a simple count.

*We could refactor the block like so:*

chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0for a in filter(lambda c: c in seek, chars): count += 1

Which is all well and good, but doesn't quite read like English. It's
verbose, too.

It also uses advanced concepts new programmers may not understand.

*We could do this:*

chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = sum([1 for a in chars if a in seek])

However, this changes important semantics by creating an entire new
list before summing.

Also, adding just one more expression to the most nested block thwarts
that refactor.

I propose the following enhancement:

chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0for a in chars if a in seek: count += 1

*What happened there?*

I've allowed a condition to follow the "for" construct without a colon
or newline between.

*To be clear, this remains incorrect:*

chars = "abcaaabkjzhbjacvb"
seek = {'a','b','c'}
count = 0for a in chars # No colon prior to the newline
     if a in seek:
          count += 1

*Value proposal:*

I assert that the inlined 'if' condition pattern is superior to the
alternative refactors.

Right now, the way to acquire an invariant in a more nasty loop would be:

for a in iterable:
     if condition:
          continue

But this is messy and not particularly Pythonic.

The filter approach uses concepts that should not be necessary for this task.

The comprehension approach has different, undesirable semantics.

*Conclusion:*

I wanted to submit my thoughts here before getting too deep into this.
Any input would be appreciated!

Thanks everyone.
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/A2PTKIJX5XY6Y2ZH7RAZJPGLFJDHTF5S/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to