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, Feb 26, 2006
    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


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

    Alex Martelli, Feb 26, 2006
    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
  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, Feb 26, 2006
  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 Martelli, Feb 27, 2006
  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
  7. Fuzzyman

    Aahz Guest

    Actually, it's not quite the same as the expansion, either:
    [1, 2]
    Aahz, Mar 1, 2006
    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.