SyntaxError: can't assign to a function call

A

Alex Martelli

Fuzzyman said:
What gives ? ...
return a ...
SyntaxError: can't assign to function call

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
 
L

Lawrence Oluyede

Fuzzyman said:
f() += [4] SyntaxError: can't assign to function call

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]

:)
 
F

Fuzzyman

Alex said:
Fuzzyman said:
What gives ? ...
a = []
def f(): return a ...
f() += [4]
SyntaxError: can't assign to function call

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])

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
 
A

Alex Martelli

Fuzzyman said:
...
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.

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
 
T

Tim Roberts

Fuzzyman said:
Alex said:
Fuzzyman said:
What gives ? ...
a = []
def f():
return a ...
f() += [4]
SyntaxError: can't assign to function call

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])

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.

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.
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,767
Messages
2,569,571
Members
45,045
Latest member
DRCM

Latest Threads

Top