从bash命令行调用的 python for循环单行代码会产生无效的语法,但列表推导可以正常工作 &



我不知道为什么

$ echo -e "test1ntest2ntest3" | python -c "import sys; for i in sys.stdin: print(i)"

产生无效语法:

File "<string>", line 1
import sys; for i in sys.stdin: print(i)
^^^
SyntaxError: invalid syntax

在使用列表推导式时效果很好:

$ echo -e "test1ntest2ntest3" | python -c "import sys; [print(i) for i in sys.stdin]"

结果:

test1
test2
test3

Python中的语句可以是单个复合语句,也可以是由;分隔的一个或多个简单语句。复合语句是由以:结尾的行后面跟着一个或多个附加语句组成的语句。你不能用;来连接它们,因为分号是嵌套块的一部分还是结束复合语句的一部分会有歧义。

从https://docs.python.org/3/reference/grammar.html

statement: compound_stmt  | simple_stmts 
simple_stmts:
| simple_stmt !';' NEWLINE  # Not needed, there for speedup
| ';'.simple_stmt+ [';'] NEWLINE 
simple_stmt:
| assignment
| star_expressions 
| return_stmt
| import_stmt
| raise_stmt
| 'pass' 
| del_stmt
| yield_stmt
| assert_stmt
| 'break' 
| 'continue' 
| global_stmt
| nonlocal_stmt
compound_stmt:
| function_def
| if_stmt
| class_def
| with_stmt
| for_stmt
| try_stmt
| while_stmt
| match_stmt

最新更新