Why can't I use an assignment in an expression?

In Python, assignment is a statement, not an expression, and can therefore not be used inside an arbitrary expression. This means that common C idioms like:

while (line = readline(file)) {
    ...do something with line...
}

or

if (match = search(target)) {
    ...do something with match...
}

cannot be used as is in Python. The first example is better written using an iterator:

for line in file:
    ... do something with line ...

but the second example must be written as:

match = search(target)
if match:
    ... do something with match ...

and loops where an iterator cannot be used have to be written as:

while True:
    line = file.readline()
    if not line:
        break
    ... do something with lin