其中两个语句运行而另一个语句因语法错误而失败。我做错了什么?
>>> Timer('for i in xrange(10): oct(i)').repeat(3)
[2.7091379165649414, 2.6934919357299805, 2.689150094985962]
>>> Timer('n = [] ; n = [oct(i) for i in xrange(10)]').repeat(3)
[4.0500171184539795, 3.6979520320892334, 3.701982021331787]
>>> Timer('n = [] ; for i in xrange(10): n.append(oct(i))').repeat(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/timeit.py", line 136, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 6
n = [] ; for i in xrange(10): n.append(oct(i))
^
SyntaxError: invalid syntax
答案 0 :(得分:7)
您的失败语句在语法上是不正确的。如果需要时间多个语句在函数中定义并调用Timer,则从main导入函数后
>>> def foo():
n = []
for i in xrange(10): n.append(oct(i))
>>> Timer("foo()","from __main__ import foo")
现在您需要了解失败语句错误的原因
套件可以是与标题位于同一行的一个或多个以分号分隔的简单语句,位于标题的冒号后面,也可以是后续行中的一个或多个缩进语句。
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
同样地,simple statement是
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 :(得分:6)
Timer('n = []\nfor i in xrange(10): n.append(oct(i))').repeat(3)
[2.026008492408778, 2.065228002189059, 2.048982731136192]
答案 2 :(得分:3)
您也可以使用triple quotes:
data.table