我尝试在Python的IDLE中测试timeit
模块
import timeit
>>> timeit.timeit( "obj.method", """
class SomeClass:
def method(self):
pass
obj = SomeClass()
""")
当我尝试在def method(self):
的下一行输入class SomeClass
时,我点击Tab
,它会提示一个窗口显示我Document
目录中的文件。所以我改为Ctrl+Tab
。
但我仍然得到错误:
Traceback (most recent call last):
File "<pyshell#26>", line 6, in <module>
""")
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 213, in timeit
return Timer(stmt, setup, timer).timeit(number)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/timeit.py", line 122, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 9
_t0 = _timer()
^
IndentationError: unindent does not match any outer indentation level
有人可以解释一下:
My Document
的提示?THX !!!
答案 0 :(得分:1)
试试这个:
>>> timeit.timeit( "obj.method", """
class SomeClass:
def method(self):
pass
obj = SomeClass()
""")
如果在常规python模块中定义了一个带有额外缩进的类,如下所示:
class Hello:
pass
解释器会抛出IndentationError。 timeit方法似乎解析输入字符串就像解析常规python文件一样,并出于类似的原因抛出缩进错误。请注意,您的字符串以关键字“Class”之前的额外(和不必要的)缩进开头。换行没问题。将空格与制表符混合也可能导致缩进错误。
我没有mac,我无法重新创建“mydocument”问题所以我无法帮助你:(
答案 1 :(得分:0)
使用timeit的巧妙技巧可避免多行引用代码问题:首先定义测试对象并从__main__
>>> class SomeClass:
def method(self):
pass
>>> obj = SomeClass()
>>> timeit.timeit( "obj.method", "from __main__ import obj")
# 0.07362023352140716