Memory management Python:函数中的额外赋值
考虑到以下两个版本是Python中一个非常简单的函数的两个版本,问题是哪一个是首选的,为什么 与使用附加赋值的Memory management Python:函数中的额外赋值,memory-management,python,cpu-usage,assign,Memory Management,Python,Cpu Usage,Assign,考虑到以下两个版本是Python中一个非常简单的函数的两个版本,问题是哪一个是首选的,为什么 与使用附加赋值的案例2相比,案例1是否有额外的内存使用量或CPU使用量 案例1: def f(x): y = x*x return y def f(x): return x*x def f(x): y=x*x 返回y 案例2: def f(x): y = x*x return y def f(x): return x*x def f(x): 返回x*x 在
案例2
相比,案例1
是否有额外的内存使用量或CPU使用量
案例1:
def f(x):
y = x*x
return y
def f(x):
return x*x
def f(x):
y=x*x
返回y
案例2:
def f(x):
y = x*x
return y
def f(x):
return x*x
def f(x):
返回x*x
在我看来,案例1
比其他案例更清晰,尤其是在复杂计算和提供许多返回对象的情况下。另一方面,案例2
看起来非常紧凑,被认为是非常有吸引力的so。因为简单就是有效的。你觉得怎么样
更新:我不知道Python中有反汇编程序!当我知道我的问题的答案和检查类似想法的方法时,我感到非常惊讶。特别感谢。
从dis导入dis作为dasm
dasm(f)
如果您想知道首选哪种Python样式,请查看标准库中的代码:
$ grep return Lib/*py
您将看到,案例2
样式是最常见的
我个人仅在需要变量名称以增加代码清晰度时才使用赋值表:
normalized_query = query.replace(' ', '').lower()
return normalized_query
此代码为分配引入了非常小的开销:
>>> def f(x):
return x + 2
>>> def g(x):
y = x + 2
return y
>>> dis(f)
2 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (2)
6 BINARY_ADD
7 RETURN_VALUE
>>> dis(g)
2 0 LOAD_FAST 0 (x)
3 LOAD_CONST 1 (2)
6 BINARY_ADD
7 STORE_FAST 1 (y)
3 10 LOAD_FAST 1 (y)
13 RETURN_VALUE
对于第一个:
>>> dis.dis(f)
2 0 LOAD_FAST 0 (x)
3 LOAD_FAST 0 (x)
6 BINARY_MULTIPLY
7 STORE_FAST 1 (y)
3 10 LOAD_FAST 1 (y)
13 RETURN_VALUE
关于第二个问题:
>>> dis.dis(f)
2 0 LOAD_FAST 0 (x)
3 LOAD_FAST 0 (x)
6 BINARY_MULTIPLY
7 RETURN_VALUE
正如您所看到的,分配某些内容会有(轻微的)成本,即使您除了在返回之前保留值之外根本没有使用它。首选的样式是该特定函数最具可读性的样式。一旦您有了可读的、正确的代码——您可能就完成了。如果此时性能是一个问题,请分析瓶颈所在的位置,并解决这些问题 优化正确的代码比纠正优化的代码更容易
我们大多数人认为这无关紧要。因此投票结束。+1个简单而有趣的问题。