python - 性能差异

Ans*_*eek 0 python performance

以下是我的功能定义

def func_a():
    return 1

def func_b(val1):
    return val1*2
Run Code Online (Sandbox Code Playgroud)

这是调用函数的一种方法:

count = 0
while count < 10000000:    
    val2 = func_b(func_a())
    count += 1
Run Code Online (Sandbox Code Playgroud)

以上时间是:

real    0m5.003s
user    0m4.989s
sys 0m0.012s
Run Code Online (Sandbox Code Playgroud)

对于具有相同功能定义的以下用法:

count = 0
while count < 10000000:    
    ret1 = func_a()
    val2 = func_b(ret1)
    count += 1
Run Code Online (Sandbox Code Playgroud)

所花的时间是

real    0m5.502s
user    0m5.414s
sys 0m0.010s
Run Code Online (Sandbox Code Playgroud)

我做了大约10次运行,两者之间的实时差异总是~300-500 ms.

系统时间通常只有约1-2毫秒不同.(最大约10毫秒).

我工作的应用程序处理大约60-90k的交易,具有亚毫秒级的性能,所以这对我来说很重要.为什么两次调用之间有这么大的差异?

编辑注意:问题修改后,以下答案现在没有多大关系,请参阅原始问题的问题编辑.

Bur*_*lid 5

从可读性角度(和代码维护?)我猜第一个更好?

实际上第二个更好,特别是如果你没有使用function_a其他地方的返回值.否则,第一行将创建一个可能导致命名空间冲突的名称.考虑一下:

foo = 42

# many many lines of code later

foo = function_a()
result = function_b(foo)

print foo # oops!
Run Code Online (Sandbox Code Playgroud)

从记忆的角度来看,第二个是更好的吗?

成本微不足道.

哪两个在性能方面更好?

从一种方法或另一种方法中获得的性能优势不会对您的应用程序产生任何实际影响.