Em qui, 27 de ago de 2020 10:37, M.-A. Lemburg <m...@egenix.com> escreveu:

> On 27.08.2020 15:17, Alex Hall wrote:
> > On Thu, Aug 27, 2020 at 3:09 PM M.-A. Lemburg <m...@egenix.com> wrote:
> >
> >> I disagree on the above assessment. I have had such a get() builtin
> >> in mxTools for more than 20 years now and found that I hardly ever
> >> used it:
> >>
> >>
> https://www.egenix.com/products/python/mxBase/mxTools/doc/#_Toc293606201
> >>
> >> The reason is simple: unlike for dicts, where you often expect
> >> non-existing items (e.g. in keyword arguments, config files, etc.),
> >> having a missing index position in a list which you parse is
> >> almost always an error.
> >>
> >> Now, errors should be clearly marked and handled as such, hence
> >> having a try-except is the better coding strategy.
> >>
> >> For those cases, where a list can have a variable
> >> number of entries (e.g. optional arguments, file lists, etc.),
> >> code should clearly branch on list length and then determine the
> >> right strategy to fetch items.
> >
> >
> > I'm copying my earlier post because apparently linking to it repeatedly
> has
> > no effect and people keep on claiming that this method wouldn't be useful
> > while not saying a word about the evidence I presented that it would be.
> >
> > dict.get is definitely much more useful. But list.get is still useful
> > reasonably often.
> >
> > You can see quite a bit of demand for the method here:
> >
> https://stackoverflow.com/questions/5125619/why-doesnt-list-have-safe-get-method-like-dictionary
> >
> > Below are some use cases I found and how they could be refactored with
> > .get. Apart from the first one, they were all found simply by grepping
> for
> > `except IndexError`. It's pretty easy to pick obvious use cases out from
> > there. In some cases readability suffers a bit and using .get might not
> be
> > the best idea, but I've included them anyway so that we can see what
> > over-eager usage of the method might look like.
>
> If I'm not mistaken, all those listed cases fall under the second case
> I mentioned (branching on length).
>
> If your API allows for optional list entries, then it's better to
> branch on length (e.g. as in the pytest case). If this happens only in
> exceptional cases, use try-except (most other cases you listed).
>
> Both coding styles make the intent clear without doubt.
>
> As mentioned before, I had access to such a builtin for many years,
> but hardly ever chose to use it and instead opted for the more explicit
> branching on length.
>
> IMO, being able to write something with fewer key strokes is not
> always a good idea. Unless you write code only for yourself, it's
> usually better to emphasize on intent rather than brevity.
>
In this case is pretty obvious the intent and this is an know abstraction.
Avoid brevity will not make it cleaner. IMHO, explicitng index bounds and
try/catch are distracting noise which hides intent instead.

Also .get() would not prevent anybody from explicity checking bounds or
catching index exceptions when appropriate

>
> --
> Marc-Andre Lemburg
> eGenix.com
>
> Professional Python Services directly from the Experts (#1, Aug 27 2020)
> >>> Python Projects, Coaching and Support ...    https://www.egenix.com/
> >>> Python Product Development ...        https://consulting.egenix.com/
> ________________________________________________________________________
>
> ::: We implement business ideas - efficiently in both time and costs :::
>
>    eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
>     D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
>            Registered at Amtsgericht Duesseldorf: HRB 46611
>                https://www.egenix.com/company/contact/
>                      https://www.malemburg.com
>
_______________________________________________
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/25OXHPNDVYRYOOWU6YDRL3PLQVLIG2K5/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to