[Python-ideas] Alternative spelling for list.append()
Michael Selik
mike at selik.org
Mon Jun 18 21:59:45 EDT 2018
On Mon, Jun 18, 2018 at 2:55 PM Mikhail V <mikhailwas at gmail.com> wrote:
> On Mon, Jun 18, 2018 at 11:43 PM, Michael Selik <mike at selik.org> wrote:
> > On Mon, Jun 18, 2018 at 12:56 PM Mikhail V <mikhailwas at gmail.com> wrote:
> >> Numpy arrays have also append() and insert() methods,
> > In [2]: np.arange(1).append(2)
> > AttributeError: 'numpy.ndarray' object has no attribute 'append'
> https://docs.scipy.org/doc/numpy/reference/generated/numpy.append.html
Perhaps NumPy chose not to provide an append method to discourage repeated
appends, since it's terribly slow.
It's a good design philosophy: make inefficient code look appropriately
ugly.
> On Mon, Jun 18, 2018 at 1:08 PM Joao S. O. Bueno <jsbueno at python.org.br>
> As for examples - below is one example from 'pyparsing' module.
> But I don't advise to think about "why" but rather just relax and
> try to 'traverse' the code back and forth several times.
>
That's interesting advice. I contrast, I find it's best to aggressively ask
"Why?" and to rewrite the code in order to fully understand it.
I think I found the chunk of code you're referring to.
https://github.com/pyparsing/pyparsing/blob/master/pyparsing.py#L848
First, I'll note that ``dump`` usually indicates dumping to a file, while
``dumps`` is dumping to a str. Regardless, I think this ``dump`` function
could be improved a bit, and a revision reduces the benefit of a dedicated
``append`` operator.
if not full:
return indent + _ustr(self.asList())
lines = [_ustr(self.asList())]
if self.haskeys():
fmt = ' ' * depth + '- %s: %s'
for k, v in sorted((str(k), v) for k, v in self.items()):
if isinstance(v, ParseResults):
if v:
s = v.dump(indent, depth + 1)
else:
s = _ustr(v)
else:
s = repr(v)
lines.append(fmt % (k, s))
elif any(isinstance(v, ParseResults) for v in self):
for i, v in enumerate(self):
lines.append(' ' * depth + '[%d]:' % i)
if isinstance(v, ParseResults):
s = v.dump(indent, depth + 1)
else:
s = _ustr(v)
lines.append(' ' * (depth + 1) + s)
return ('\n' + indent).join(lines)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180618/87726a53/attachment.html>
More information about the Python-ideas
mailing list