正在学习python并开始研究嵌套/工厂函数(简单示例):
def maker(N):
def action(X):
return X * N
return action
工厂功能相比创建类有什么优势吗?性能?记忆?清理?
答案 0 :(得分:26)
我最喜欢嵌套函数的是它比类更简洁。制造商函数的等价类定义是:
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
答案 1 :(得分:13)
将函数工厂与类进行比较是比较苹果和橙子。如果您有一个紧密的数据和函数集合,则使用一个类,一起称为对象。如果需要函数,请使用函数工厂,并希望参数化其创建。
您对这两种技术的选择应取决于代码的含义。
答案 2 :(得分:3)
嵌套函数允许用户动态创建自定义函数。
看看例如decorators。生成的函数取决于在创建时绑定的变量,之后不需要更改。因此,为此目的使用类会使更少感觉。