只是通过学习python并开始研究嵌套/工厂函数(简单示例):
def maker(N): def action(X): return X * N return action
与创建类相比,工厂功能有什么优势吗?性能?记忆?清理?
我最喜欢嵌套函数的地方是,它比类少冗长。与您的maker函数等效的类定义为:
class clsmaker(object): def __init__(self, N): self.N = N def __call__(self, X): return X * self.N
在您开始向构造函数添加更多参数之前,这似乎并不算糟糕。然后,以类的方式为每个参数增加一行,而函数仅获得额外的args。
事实证明,嵌套函数也具有速度优势:
>>> T1 = timeit.Timer('maker(3)(4)', 'from __main__ import maker') >>> T1.timeit() 1.2818338871002197 >>> T2 = timeit.Timer('clsmaker(3)(4)', 'from __main__ import clsmaker') >>> T2.timeit() 2.2137160301208496
这可能是由于嵌套函数版本中涉及的操作码更少:
>>> dis(clsmaker.__call__) 5 0 LOAD_FAST 1 (X) 3 LOAD_FAST 0 (self) 6 LOAD_ATTR 0 (N) 9 BINARY_MULTIPLY 10 RETURN_VALUE >>> act = maker(3) >>> dis(act) 3 0 LOAD_FAST 0 (X) 3 LOAD_DEREF 0 (N) 6 BINARY_MULTIPLY 7 RETURN_VALUE