gpt4 book ai didi

python - python 解释器是否执行动态优化?

转载 作者:太空宇宙 更新时间:2023-11-04 09:37:43 24 4
gpt4 key购买 nike

例如,假设我有一个列表,我想将其转换为 np.array。一个好方法(恕我直言)是:

my_np_array = np.reshape(my_list,(200,200))

如果我是一个非常坏的人,我可以使用:

my_np_array = np.array(my_list).reshape(200,200)

甚至

useless_array = np.array(my_list)
useful_array = useless_array/reshape(200,200)

假设 useless_array 不再被提及,python 解释器是否能够将第二个和第三个语句转换为第一个语句?

编辑:当我问这个问题时,我正在考虑标准的 3.7 python 解释器,但我会对任何能够执行优化的 Python 解释器/编译器感兴趣。

最佳答案

是也不是。是的——python vm 做了一些有限的优化。主要限制是 python 是动态的,你不能优化前面的大部分东西——不像 Java。一些实现比其他实现更“智能”。例如,pypy 执行 JIT 编译,CPython 执行一些低级技巧。

否 — python (CPython) 不进行变量内联,原因是您可以使用 python -i non-optimized.py 运行脚本并且您应该能够访问所有变量.这同样适用于附加调试器。

基本上,一些性能优化牺牲了动态特性,一些还没有在实现中完成。

关于您的方法的旁注 — 它具有相同的性能, reshape 非常便宜,并且不会影响内存结构。另外,实际上,您总是想分析您的代码,对它进行理论化要好得多:

In [11]: %timeit my_np_array = np.reshape(my_list,(200,200))                                                                                                                                                       
1.92 ms ± 3.76 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [12]: %timeit my_np_array = np.array(my_list).reshape(200,200)
1.92 ms ± 8.01 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [13]: %timeit useless_array = np.array(my_list); useful_array = useless_array.reshape(200,200)
1.92 ms ± 4.29 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - python 解释器是否执行动态优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53061819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com