• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • The 'expand this here' * operator in python

    September 29th, 2009
    python, programming  [html]
    The python docs (2.6.2) say this about the use of *:
    5.3.4:

    If the syntax *expression appears in the function call, expression must evaluate to a sequence. Elements from this sequence are treated as if they were additional positional arguments; if there are positional arguments x1,..., xN, and expression evaluates to a sequence y1, ..., yM, this is equivalent to a call with M+N positional arguments x1, ..., xN, y1, ..., yM

    7.6:

    If the * is present [in the function definition argument list], it is initialized to a tuple receiving any excess positional parameters, defaulting to the empty tuple
    This is very handy, but is also limited. In python 3.0, PEP 3132 added some related syntax:
    first, *rest = seq
    a, *b, c = range(5)
    This is again, handy but limited. This star syntax only works in these two cases: functions (star-args) and assignment targets. There are logical extensions that make a lot of sense to me, though. If one can do:
    first, *rest = seq
    then I want to be able to do:
    seq = first, *rest
    While the following is ambiguous and so clearly needs to be illegal:
    first, *some, *rest = seq
    this is not ambiguous:
    seq = first, *some, *rest
    While we're at it, lets make the following legal:
    foo(first, *some, *rest)
    All these changes together would make for a very consistent and powerful interpretation of * as 'expand this sequence here'.

    Update 2013-04-05: Danner points out a 2008 patch. This was put on hold because of the moratotium (to "allow non-CPython implementations to 'catch up'") but with 3.3 out I think the moratorium is over. I just poked the bug.

    Recent posts on blogs I like:

    What should we do about network-effect monopolies?

    Many large companies today are software monopolies that give their product away for free to get monopoly status, then do horrible things. Can we do anything about this?

    via benkuhn.net July 5, 2020

    More on the Deutschlandtakt

    The Deutschlandtakt plans are out now. They cover investment through 2040, but even beforehand, there’s a plan for something like a national integrated timetable by 2030, with trains connecting the major cities every 30 minutes rather than hourly. But the…

    via Pedestrian Observations July 1, 2020

    How do cars fare in crash tests they're not specifically optimized for?

    Any time you have a benchmark that gets taken seriously, some people will start gaming the benchmark. Some famous examples in computing are the CPU benchmark specfp and video game benchmarks. With specfp, Sun managed to increase its score on 179.art (a su…

    via Posts on Dan Luu June 30, 2020

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact