SyntaxError: can't assign to a function call

Discussion in 'Python' started by Fuzzyman, Feb 26, 2006.

  1. Fuzzyman

    Fuzzyman Guest

    What gives ?
    return a
    Fuzzyman
    http://www.voidspace.org.uk/python/index.shtml
     
    Fuzzyman, Feb 26, 2006
    #1
    1. Advertisements

  2. Exactly what the error message says: it's syntactically forbidden to
    perform any assignment on a function-call.

    If you're keen on these semantics, use for example

    f().extend([4])

    which IS quite legal (or, if you know the RHS list has only one item,
    f().append(4) is clearer and more effective).


    Alex
     
    Alex Martelli, Feb 26, 2006
    #2
    1. Advertisements

  3. It's obvious that that line gives you a syntax error. += is the increment
    operator overloaded for strings and lists and so on. It changes the lhs in
    place appending the rhs. In this case the rhs is a function call so... how the
    compiler knows how to assign to a function call?

    Do the things easily:

    - x = f()
    - x += [4]

    :)
     
    Lawrence Oluyede, Feb 26, 2006
    #3
  4. Fuzzyman

    Fuzzyman Guest

    Cool, thanks. That's what I did, it's just not an error I'd seen
    before. Everywhere else Python evaluates the function call and then
    does it's stuff with the result.

    All the best,

    Fuzzyman
     
    Fuzzyman, Feb 26, 2006
    #4
  5. Not sure what you mean by 'everywhere else'; generally and syntactically
    speaking, you can use a function-call, more or less, in all the places,
    and only the places, in which you could use a constant (literal) list
    such as [2] -- you can't assign to it, you can't use it as the x in 'for
    x in ...', in a clause "except x, y:" you can (syntactically) use it as
    x but not as y, etc. Basically, wherever Python needs a rebindable name
    or other rebindable reference, you cannot substitute a function call,
    nor a constant (literal) list (nor any of several other possible
    literals and other expressionforms).

    Wherever Python just needs a value, not a rebindable whatever, then of
    course you can supply that value in whatever syntax form suits you best,
    including a function-call, a literal, and many other ways besides.


    Alex
     
    Alex Martelli, Feb 27, 2006
    #5
  6. Fuzzyman

    Tim Roberts Guest

    One thing that can be helpful in situations like this is to remember that
    += in Python isn't quite as "special" as it is in C. So,

    f() += [4]

    is the same as

    f() = f() + [4]

    and I think you can see why that is a problem.
     
    Tim Roberts, Feb 27, 2006
    #6
  7. Fuzzyman

    Aahz Guest

    Actually, it's not quite the same as the expansion, either:
    [1, 2]
     
    Aahz, Mar 1, 2006
    #7
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.