On Thu, Oct 24, 2019 at 7:53 AM Ethan Furman <et...@stoneleaf.us> wrote:

> >      for something in lots_of_items:
> >          for another in more_items:
> >              function(spam, eggs, "cyan,forest green,burnt
> umber".split(','))
>
> If you have a tight loop that is a performance bottleneck (you did
> measure, right?), then you trade readability for performance.  This is not
> news.
>
> > That's easy to fix, you say. Move the list outside the loop:
> >
> >      L = "cyan,forest green,burnt umber".split(','))
> >      for something in lots_of_items:
> >          for another in more_items:
> >              function(spam, eggs, L)
> >
> > What's wrong with this picture?
>
> Other than you're now using one list for all calls, and the function could
> by modifying that list?  You do know if the function modifies the list,
> right?  I give up, what is wrong with that picture?
>

Imagine that was his point -- the two codes are not equivalent if the list
if modified by the function.

I'll confess that I didn't immediately see that -- but then again, I'm not
writing the code and thinking about what it's actually supposed to do,

But of course we can come up with toy examples of where you *could* have to
put a list of string literals inside a tight loop, but I'm having trouble
imagining real-world cases. And I'm pretty sure that most folks think
passing a list into a function and having it modified is "bad form" anyway.
But where it does make sense for a function to modify a list, it's pretty
unlikely that you would want to call it with the exact same initial list
anyway -- if it's getting modified, presumably you want to preserve that
modification, no?

This does bring up a point though: I often think that folks use lists be
default, where they don't need it to be mutable, and very well might not
want it to be mutable (see above -- there is no way for the caller to know
if that list is modified without reading the source -- if you wanted to be
sure, you could pass in tuple of string instead.

It's long standing practice to use a tuple when you *need* it to be
immutable, and a list otherwise. but maybe we should have an easy way to
make a tuple of strings as well?

Just sayin'

But again: my point (I think I started this sub-thread) was that
performance is NOT a good reason to add this feature, and I'm still
surprised that people are still bringing it up.

-CHB









> --
> ~Ethan~
> _______________________________________________
> 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/B5SRQ4T3ULOTYYWF7B4FIYKNDYPB46PJ/
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
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/KO4HXFEMIMTJE3CIKL566BJ6SRPIAY3Q/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to