导入后的 for 循环在 Python 单行中不起作用



如果我使用import,然后出现for,则会出现invalid syntax错误。我不知道为什么会发生这种事。

> 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)
                 ^

移除import效果良好:

> python3 -c 'for a in range(1,5): print(a)'
1
2
3
4

或者完全去除for环路:

> python3 -c 'import os; print(10)'
10

那到底发生了什么??

这是一个错误,因为它不在Python语法中。

如果你查看一下复合语句的语法规范,你会发现一个语句列表(即你用分号做的)被定义为:

stmt_list ::= simple_stmt (";" simple_stmt)* [";"]

并且for构造不是simple_stmt而是compound_stmt

然而,print(10)是一个simple_stmt,因此,它很好。

正如您所看到的,Python不允许将块打开语句(如for)与其他语句放在一行中。通常,在某些情况下,您不应该在脚本中使用;——它是唯一的解决方案(如使用-c执行python代码的命令),但在脚本中只需使用换行符。

有关Python中编码风格标准的详细信息,您可以阅读PEP 8:http://legacy.python.org/dev/peps/pep-0008/

2022年有了python3,你可以做到这一点:

python3 -c 'import os; [print(a) for a in range(1,5)]'

将单行代码转换为多行形式,并将换行符替换为"\n〃;。然后将其作为字符串传递给exec函数:

python3 -c "exec('import osnfor a in range(1,5):n print(a)')"

虽然不优雅,但它可以在不需要脚本文件的情况下完成任务。

只是作为另一种解决方法在bash:

python3-c";导入日期时间;导入系统"$"\n’";对于范围(10)中的i:打印(i)";

Python语法确实不支持您所写的for循环,但至少您仍然可以使用理解来实现您在文章中所展示的内容:

import os; print([a for a in range(1,5)])

或者更准确地说:

import os; print("n".join([str(a) for a in range(1,5)]))

最新更新