Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

For loop after import doesn't work in Python one-liner

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

like image 471
Pithikos Avatar asked Jul 24 '26 01:07

Pithikos


2 Answers

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.

like image 133
Joey Coleman Avatar answered Jul 25 '26 13:07

Joey Coleman


Well in 2022 with python3 you can do this:

python3 -c 'import os; [print(a) for a in range(1,5)]'
like image 31
Jay Avatar answered Jul 25 '26 15:07

Jay



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!