If I use import
and a for
follows afterwards I get an invalid syntax
error. I have no idea why this happens.
> python3 -c 'import os; for a in range(1,5): print(a)'
File "<string>", line 1
import os; for a in range(1,5): print(a)
^
Removing the import
works fine:
> python3 -c 'for a in range(1,5): print(a)'
1
2
3
4
or totally removing the for
loop:
> python3 -c 'import os; print(10)'
10
So what's going on??
It's an error because it's not in the Python grammar.
If you check out the syntax specification for compound statements, you'll see that a statement list (i.e. what you're making with the semicolon) is defined as:
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
and the for
construct is not a simple_stmt
, but instead is a compound_stmt
.
The print(10)
, however, is a simple_stmt
and, as such, is just fine.
As you see Python does not allow you to put a block opening statement (like for
) into a line with an other statement.
In general you should not use the ;
inside a script in some situations it (like the command execution of python code with -c
) it is the only solution, but inside a script just use a line break.
For details about coding style standards in Python you can read the PEP 8: http://legacy.python.org/dev/peps/pep-0008/