我正在学习python,并开始学习嵌套/工厂函数(简单的示例):
def maker(N):
def action(X):
return X * N
return action
与创建类相比,工厂函数有什么优势吗?性能?记忆?清理?
发布于 2009-05-23 09:38:58
我最喜欢嵌套函数的是它比类更少的冗长。与maker函数等效的类定义为:
class clsmaker(object):
def __init__(self, N):
self.N = N
def __call__(self, X):
return X * self.N
在您开始向构造函数添加更多参数之前,这看起来并不是很糟糕。然后,类方法为每个参数额外添加一行,而函数只获取额外的参数。
事实证明,嵌套函数也有速度优势:
>>> 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
发布于 2009-05-23 16:55:57
将函数工厂比作类就像是在比较苹果和橙子。如果您有一个数据和函数的内聚集合,则可以使用类,这些集合一起称为对象。如果你需要一个函数,并且想要参数化它的创建,那么可以使用函数工厂。
这两种技术的选择应该取决于代码的含义。
发布于 2009-05-23 08:49:18
嵌套函数允许用户动态创建自定义函数。
例如,看看decorators。生成的函数依赖于在创建时绑定的变量,并且不需要在以后进行更改。因此,使用类来实现此目的意义不大。
https://stackoverflow.com/questions/901892
复制