Memory management 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 在

考虑到以下两个版本是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 在我看来,
案例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个简单而有趣的问题。