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

时间:2013-09-03 21:54:25

标签: python bash timeit

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

但是,当我尝试使用分号并单独循环时。两者都很好。

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

为什么会如此?如何在timeit中测试while循环?非常感谢你!

4 个答案:

答案 0 :(得分:10)

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

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组:

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

选择的答案可以很好地解决原因,但不能解决在任何操作系统下如何解决这个问题的问题(因为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'"

正常工作。