• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • The 'expand this here' * operator in python

    September 29th, 2009
    programming, python  [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 I've been doing instead of writing

    I’ve been too busy with work to write much recently, but in lieu of that, here’s a batch of links to other stuff I’ve been doing elsewhere. The thing I’m most excited about: Wave raises $200m from Sequoia, Stripe, Founders Fund and Ribbit at a $1.7b valuati…

    via benkuhn.net September 11, 2021

    Some reasons to measure

    A question I get asked with some frequency is: why bother measuring X, why not build something instead? More bluntly, in a recent conversation with a newsletter author, his comment on some future measurement projects I wanted to do (in the same vein as ot…

    via Posts on Dan Luu August 27, 2021

    Songs about terrible relationships

    [Spoilers for several old musicals.] TV Tropes lists dozens of examples of the “I want” song (where the hero of a musical sings about their dream of escaping their small surroundings). After watching a bunch of musicals on maternity leave, I’m wondering h…

    via The whole sky July 17, 2021

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact