Why is Python assignment a statement rather than an expression? If it was an expression which returns the value of the right hand side in the assignment, it would have allowed for much less verbose code in some cases. Are there any issues I can't see?
For example:
# lst is some sequence
# X is come class
x = X()
lst.append(x)
could have been rewritten as:
lst.append(x = X())
Well, to be precise, the above won't work because x
would be treated as a keyword argument. But another pair of parens (or another symbol for keyword arguments) would have resolved that.
There are many who feel that having assignments be expressions, especially in languages like Python where any value is allowable in a condition (not just values of some boolean type), is error-prone. Presumably Guido is/was among those who feel that way. The classic error is:
if x = y: # oops! meant to say ==
The situation is also a bit more complicated in Python than it is in a language like C, since in Python the first assignment to a variable is also its declaration. For example:
def f():
print x
def g():
x = h()
print x
In these two functions the "print x
" lines do different things: one refers to the global variable x
, and the other refers to the local variable x
. The x
in g
is local because of the assignment. This could be even more confusing (than it already is) if it was possible to bury the assignment inside some larger expression/statement.