Python:多次使用相同的参数调用相同的函数,或者将结果保存为中间值?

Tia*_* Li 1 python performance

如果我有一个功能

def bar(n):
    return n**100
Run Code Online (Sandbox Code Playgroud)

两者之间会有性能差异吗?

for i in range(1000000):
    x = bar(30)
    # use x for something
Run Code Online (Sandbox Code Playgroud)

x = bar(30)
# use x for something 1,000,000 times
Run Code Online (Sandbox Code Playgroud)

我不知道解释器是否针对这样的情况进行了优化?

Sve*_*ach 5

CPython编译器只进行了很少的简单窥视孔优化,但它肯定不会优化函数调用 - 它如何知道函数是否还有副作用?在编译时,它通常甚至不知道名称bar引用哪个函数,并且名称绑定可能随时更改.

如果有疑问,只需自己测量性能 - timeit模块就是你的朋友.