我正在尝试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循环?非常感谢你!
答案 0 :(得分:10)
while
,for
之前不能有分号,它们需要在一行上。如果您查看了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'"
正常工作。