这是我ipython年的测试结果.

int美元:

In [2]: %time for _  in range(1000): exec('a: int = 4')                                                                                                                         
CPU times: user 12.2 ms, sys: 12 µs, total: 12.2 ms
Wall time: 12.2 ms

In [3]: %time for _  in range(1000): exec('a = 4')                                                                                                                              
CPU times: user 9.5 ms, sys: 0 ns, total: 9.5 ms
Wall time: 9.54 ms

str美元:

In [4]: %time for _  in range(1000): exec('a: str = "hello"')                                                                                                                   
CPU times: user 13.3 ms, sys: 0 ns, total: 13.3 ms
Wall time: 13.4 ms

In [5]: %time for _  in range(1000): exec('a = "hello"')                                                                                                                        
CPU times: user 10.4 ms, sys: 0 ns, total: 10.4 ms
Wall time: 10.4 ms

list美元:

In [6]: %time for _  in range(1000): exec('a: list = [1,2, "hello"]')                                                                                                           
CPU times: user 19.1 ms, sys: 0 ns, total: 19.1 ms
Wall time: 21.5 ms

In [7]: %time for _  in range(1000): exec('a = [1,2, "hello"]')                                                                                                                 
CPU times: user 15.8 ms, sys: 0 ns, total: 15.8 ms
Wall time: 15.8 ms

我知道理论上listint个注释应该没有任何区别,但它们没有任何功能.但我只是测试了这些类型,以确保使用类型提示会将执行速度降低约25%.这是为什么?据我所知,类型提示与执行无关.只是花更多的时间来解析它们,并将它们添加到__annotations__字典中,就可以在执行时间上产生如此巨大的差异?

推荐答案

您的方法是测试将python代码的原始字符串版本解释为可执行内容的编译时间.如果你将timeit与Functions结合使用,你不会看到明显的区别:

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))
2.8046581
2.8103205999999994

Python相关问答推荐

Python -根据另一个数据框中的列编辑和替换数据框中的列值

添加包含中具有任何值的其他列的计数的列

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

在Python中处理大量CSV文件中的数据

如何更改分组条形图中条形图的 colored颜色 ?

OR—Tools中CP—SAT求解器的IntVar设置值

在Python中动态计算范围

如何在WSL2中更新Python到最新版本(3.12.2)?

计算每个IP的平均值

pandas:对多级列框架的列进行排序/重新排序

在Admin中显示从ManyToMany通过模型的筛选结果

从旋转的DF查询非NaN值

在Python中从嵌套的for循环中获取插值

为什么我的sundaram筛这么低效

如何根据rame中的列值分别分组值

计算机找不到已安装的库'

如何反转一个框架中列的值?

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

两个名称相同但值不同的 Select 都会产生相同的值(discord.py)