Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #36805 > unrolled thread

Re: proposal: Ellipsis in argument list

Started byChris Kaynor <ckaynor@zindagigames.com>
First post2013-01-14 09:38 -0800
Last post2013-01-14 09:38 -0800
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: proposal: Ellipsis in argument list Chris Kaynor <ckaynor@zindagigames.com> - 2013-01-14 09:38 -0800

#36805 — Re: proposal: Ellipsis in argument list

FromChris Kaynor <ckaynor@zindagigames.com>
Date2013-01-14 09:38 -0800
SubjectRe: proposal: Ellipsis in argument list
Message-ID<mailman.509.1358185133.2939.python-list@python.org>

[Multipart message — attachments visible in raw view] — view raw

On Sat, Jan 12, 2013 at 5:30 AM, Szabolcs Blága <szabolcs.blaga@gmail.com>wrote:

> Dear All,
>
> I have an idea that the Ellipsis object could be used in function calls.
> The "..." syntax should automagically turn into an Ellipsis positional
> argument.
>
> def f(*args):
>   ext_args = []
>   for i, a in enumerate(args):
>     if a is Ellipsis:
>       ext_args.extend([x for x in range(args[i-1]-1, args[i+1])])
>     else:
>       ext_args.append(a)
>   return ext_args
>
> Calling it for the above example specifically:
>
> >>>f(34, ..., 43)
> [34, 35, 36, 37, 38, 39, 40, 41, 42, 43]
>
> That might be useless or someone might say it is confusing, but I think it
> would be relatively easy to implement and a nice little syntactic "sugar".
>
>
The basis for adding syntactic sugar is closer to: Is this something that
cannot be done clearly without the change, and is commonly useful?
Also, as Stefan showed, this is already valid syntax with differing
meaning, and thus could break existing code, making the threshold for
adding it even harder.

This change doesn't seem to useful, and can be easily done already:
    f(range(34, 43))

Additionally, a decorator could easily be written to do this if you find
this is a pattern you commonly use for specific functions (untested), or
you can use your expansion function for other cases:

def ellipsisExpand(func):
  def newFunc(*args, **kwargs):
    ext_args = []
    for i, a in enumerate(args):
      if a is Ellipsis:
        ext_args.extend([x for x in range(args[i-1]-1, args[i+1])])
      else:
        ext_args.append(a)
    return func(*ext_args, **kwargs)

Then, you use this like:
@ellipsisExpand
def f(arg):
   print arg



> Best regards,
>
> Szabolcs Blaga
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
>

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web