我已经使用 Python timeit模块很长时间了,但它只是通过交互式 Python 会话或 Unix shell。现在,我正在尝试在 Windows 命令提示符 ( cmd.exe ) 中测量一些代码片段,但它显示了这个错误:
C:\Users\Me>python -m timeit '"-".join(map(str, range(100)))'
Traceback (most recent call last):
File "C:\Python33\lib\runpy.py", line 160, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "C:\Python33\lib\runpy.py", line 73, in _run_code
exec(code, run_globals)
File "C:\Python33\lib\timeit.py", line 334, in <module>
sys.exit(main())
File "C:\Python33\lib\timeit.py", line 298, in main
t = Timer(stmt, setup, timer)
File "C:\Python33\lib\timeit.py", line 131, in __init__
code = compile(src, dummy_src_name, "exec")
File "<timeit-src>", line 6
'-.join(map(str,
^
SyntaxError: EOL while scanning string literal
这相当令人困惑,因为我没有在字符串中插入任何换行符 - 相反,我实际上直接从 timeit 模块文档中粘贴了示例。
在玩这个时,我尝试测试没有任何空格的片段,因为错误标记了它们之前的字符。即使现在没有发生异常,该模块也会报告相同的执行时间,就像我传递了一条pass
语句一样,如下所示:
C:\Users\Me>python -m timeit
100000000 loops, best of 3: 0.013 usec per loop
C:\Users\Me>python -m timeit 'map(str,range(100))'
100000000 loops, best of 3: 0.013 usec per loop
C:\Users\Me>python -m timeit 'map(str,range(1000000000000000))'
100000000 loops, best of 3: 0.013 usec per loop
我确信我正确地调用了该模块,因为我在 Unix shell 上粘贴了相同的行并且它们按预期工作。
由于我使用 Python 2.7 和 3.3 得到完全相同的结果(另外,该模块是用纯 Python 编写的,并且已经存在了很长时间)我确信这与 Python 无关,但是 Windows 命令提示符,反而。
那么,为什么这种奇怪的行为会准确发生,我该如何解决呢?