在Bash中调用Python单行for循环报语法错,列表推导式正常
语法差异原因解析
这是因为Python对分号分隔语句的规则有明确限制:分号只能用来分隔多个简单语句,而for循环属于复合语句(带有冒号和代码块的语句结构),不能直接和前面的简单语句用分号拼接。
看报错的代码:
import sys; for i in sys.stdin: print(i)
这里import sys是简单语句,但后面的for循环是复合语句,Python不允许用分号把简单语句和复合语句放在同一行的这种写法,所以触发语法错误。
而列表推导式的写法:
import sys; [print(i) for i in sys.stdin]
这里的[print(i) for i in sys.stdin]是一个表达式,属于可以用分号和前面简单语句拼接的范畴,所以Python能正确解析执行。
另外补充一点:如果非要在一行写for循环,得用exec包裹复合语句,比如:
echo -e "test1\ntest2\ntest3" | python -c "import sys; exec('for i in sys.stdin: print(i)')"
这样就能正常运行了。
内容的提问来源于stack exchange,提问作者Daniel Krajnik
相关产品推荐
相关产品推荐

