Ami*_*ahi 3 python performance type-hinting
这些是我在 中的测试结果ipython。
为了int:
In [2]: %time for _ in range(1000): exec(\'a: int = 4\') \nCPU times: user 12.2 ms, sys: 12 \xc2\xb5s, total: 12.2 ms\nWall time: 12.2 ms\n\nIn [3]: %time for _ in range(1000): exec(\'a = 4\') \nCPU times: user 9.5 ms, sys: 0 ns, total: 9.5 ms\nWall time: 9.54 ms\n\nRun Code Online (Sandbox Code Playgroud)\n对于str:
In [4]: %time for _ in range(1000): exec(\'a: str = "hello"\') \nCPU times: user 13.3 ms, sys: 0 ns, total: 13.3 ms\nWall time: 13.4 ms\n\nIn [5]: %time for _ in range(1000): exec(\'a = "hello"\') \nCPU times: user 10.4 ms, sys: 0 ns, total: 10.4 ms\nWall time: 10.4 ms\nRun Code Online (Sandbox Code Playgroud)\n也适用于list:
In [6]: %time for _ in range(1000): exec(\'a: list = [1,2, "hello"]\') \nCPU times: user 19.1 ms, sys: 0 ns, total: 19.1 ms\nWall time: 21.5 ms\n\nIn [7]: %time for _ in range(1000): exec(\'a = [1,2, "hello"]\') \nCPU times: user 15.8 ms, sys: 0 ns, total: 15.8 ms\nWall time: 15.8 ms\n\nRun Code Online (Sandbox Code Playgroud)\nlist我知道从理论上讲,注释不应该有任何差异int,但它们没有任何功能。但我只是测试了这些类型,以确保使用类型提示会使执行速度降低约 25%。为什么是这样?据我所知,类型提示对执行没有任何作用。只是花更多的时间来解析它们并将它们添加到__annotations__字典中就会在执行时间上产生巨大的差异吗?
您的方法正在测试将 python 代码的原始字符串版本解释为可执行文件的编译时间。如果您将 timeit 与 fucntions 一起使用,您不会看到明显的差异:
import timeit
def method1():
for _ in range(1000): a: int = 4
def method2():
for _ in range(1000): a = 4
print(timeit.timeit(method1, number=200000))
print(timeit.timeit(method2, number=200000))
Run Code Online (Sandbox Code Playgroud)
2.8046581
2.8103205999999994
Run Code Online (Sandbox Code Playgroud)