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/