For loop after import doesn't work in Python o

2020-07-24 04:56发布

问题:

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??

回答1:

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.



回答2:

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/