Python命令行参数分号循环错误



我正在试用python -mtimeit,所以我放了python -mtimeit "n = 0; while n < 10: pass"然后出现一个无效语法错误。与分号和for循环相同。

但是,当我分别尝试分号和循环时。两个都很好。

python -c "for i in range(10): print(n)"  
python -c "n = 1; n = 2; print(n)"

为什么会这样?我如何在timeit中循环时进行测试?非常感谢!

whilefor之前不能有分号,它们需要在一行上。如果您查看Python语法:

compound_stmt ::=  if_stmt
                   | while_stmt
                   | for_stmt
                   | try_stmt
                   | with_stmt
                   | funcdef
                   | classdef
                   | decorated
suite         ::=  stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement     ::=  stmt_list NEWLINE | compound_stmt
stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]

您将看到作为compound_stmt的一部分的语句需要是单独的一行。唯一可以用分号分隔的语句是simple_stmt group:

simple_stmt ::=  expression_stmt
                 | assert_stmt
                 | assignment_stmt
                 | augmented_assignment_stmt
                 | pass_stmt
                 | del_stmt
                 | print_stmt
                 | return_stmt
                 | yield_stmt
                 | raise_stmt
                 | break_stmt
                 | continue_stmt
                 | import_stmt
                 | global_stmt
                 | exec_stmt

timeit可以采用两个参数:设置代码和时间代码。

python -mtimeit "n = 0" "while n < 10: pass"

此外,您应该将pass更改为n += 1,否则您将处于无限循环中。

如果你在脚本中编写它,为什么不像在真正的python程序中那样缩进它呢?像这样:

python -mtimeit "
n = 0
while n < 10:
    pass"

选择的答案非常好地解决了为什么,但不是在任何操作系统下如何解决的问题(因为windows cmd不允许多行语句)

答案是:exec

您必须在exec语句中嵌套任何循环。

示例:(Python 2)

python -c "i = 3; while i:print i; i-=1"

是语法错误,而

python -c "i = 3; exec 'while i:print i;i-=1'"

工作正常。

这是一个老话题,但没有人提到列表理解,所以它就在这里。

如果涉及打印,也可以使用带有功能的列表理解:

python2 -m timeit "from pprint import pprint; [pprint(i) for i in range(1000)]"

在python3中,打印本身可以工作,因为与python2不同,它已经是一个函数:

python3 -m timeit "[print(i) for i in range(1000)]"

相关内容

  • 没有找到相关文章

最新更新