在 Python 中考虑以下两个版本的非常简单的函数,问题是哪一个优先于另一个,为什么?
case 1
与使用了其他作业的case 2
相比,是否还有内存使用率和 CPU使用率?
案例1:
def f(x): y = x*x return y
案例2:
def f(x): return x*x
从我的观点来看,case 1
比另一个更清晰,特别是在复杂计算和提供许多返回对象的情况下。另一方面,case 2
看起来非常紧凑,因此被认为非常有吸引力。因为简单只是简单有效。你觉得怎么样?
更新
我不知道Python中有反汇编程序!当我了解到我的问题的答案以及检查类似想法的方法时,真是太神奇了。特别欣赏。
from dis import dis as dasm
dasm(f)
答案 0 :(得分:7)
如果您想知道首选的Python样式,请查看标准库中的代码:
$ grep return Lib/*py
您会看到case 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
答案 1 :(得分:3)
第一个:
>>> 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
正如你所看到的,即使你没有使用它,除非在返回之前保留该值,否则分配内容会有(轻微)成本。
答案 2 :(得分:3)
首选样式是对该特定功能最具可读性的样式。一旦你有可读的,正确的代码 - 你可能已经完成了。 如果此时性能是一个问题,请查看配置文件以查看瓶颈所在,并处理这些问题。
优化正确的代码比纠正优化代码更容易。