Small correction: isinstance(x, int) should be x.isdigit() in the last
example.

On Fri, Apr 30, 2021 at 2:14 PM David Álvarez Lombardi <
alvarezd...@gmail.com> wrote:

> I appreciate the feedback, but I don't think the proposed ideas address
> any of my points.
>
>    1. *Consistency *(with other comprehensions)
>    2. *Intuitiveness *(as opposed to str.join(iter) which is widely
>    deemed to be confusing and seemingly-backwards)
>    3. *Efficiency *(with respect to line count and function calls...
>    though perhaps the cpython implementation could actually avoid the type
>    switching and improve time complexity)
>    4.  *Readability *(due to *much *clearer typing and lack of
>    highly-nested function calls ( f"[{','.join('0123')}]" ) and
>    higher-order functions ( genjoin('', '', '')('0123') )
>
> I would also like readers/commenters to consider the fact that, though I
> have only provided one use-case, the proposed enhancement would serve as
> the primary syntax for constructing or filtering a string *when dependent
> on any other iterable or condition*. I believe this to be an
> extremely common (almost universal) use-case. Here are just a couple more
> examples.
>
> new = c"x.lower() for x in old if x in HARDCODED_LIST"  # filter-in chars
> that appear in earlier-defined HARDCODED_LIST and convert to lower
> new = c"x for x in old if not x.isprintable()"  # filter-in
> non-printable chars
> new = c"str(int(x) + 1) for x in old if isinstance(x, int)"  # increment
> all integers by 1
>
> To me, it is hard to see how any argument against this design (for
> anything other than implementation-difficulty or something along these
> lines) can be anything but an argument against iter comprehensions in
> general... but if someone disagrees, please say so.
>
> My goal is to *decrease* complexity, and personal/higher-order/nested
> procedures do not accomplish this in my eyes.
>
> Thank you.
>
> DQAL
>
> On Fri, Apr 30, 2021 at 1:10 PM Jonathan Fine <jfine2...@gmail.com> wrote:
>
>> On Fri, Apr 30, 2021 at 6:00 PM Chris Angelico <ros...@gmail.com> wrote:
>>
>> For those cases where you're merging literal parts and generated
>>> parts, it may be of value to use an f-string:
>>>
>>> >>> f"[{','.join('0123')}]"
>>> '[0,1,2,3]'
>>>
>>> The part in the braces is evaluated as Python code, and the rest is
>>> simple literals.
>>>
>>
>> For readability, reuse and testing I think it often helps to have a
>> function (whose name is meaningful). We can get this via
>>    as_list_int_literal = gensep(',', '[', ']')
>>
>> It would also be nice to allow as_list_int_literal to have a docstring
>> (which could also be used for testing).
>>
>> I accept that in some cases Chris's ingenious construction has benefits.
>>
>> --
>> Jonathan
>>
>> _______________________________________________
>> Python-ideas mailing list -- python-ideas@python.org
>> To unsubscribe send an email to python-ideas-le...@python.org
>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/python-ideas@python.org/message/UVTLPOK4S663GIMSTUWBDMFSFHUEYHGJ/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/DR5GHAJPJ3GBOPWLHWQGJHB6OTEIZANM/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to