刚刚学习python并开始查看嵌套/工厂函数(简单示例):
def maker(N):
def action(X):
return X * N
return action
Run Code Online (Sandbox Code Playgroud)
工厂功能优于创建类有什么优势吗?性能?记忆?清理?
The*_*ran 27
我最喜欢嵌套函数的是它比类更简洁.您的制造商功能的等效类定义是:
class clsmaker(object):
def __init__(self, N):
self.N = N
def __call__(self, X):
return X * self.N
Run Code Online (Sandbox Code Playgroud)
在你开始向构造函数添加更多参数之前,这似乎并不那么糟糕.然后以类方式执行它为每个参数获取额外的行,而函数只获取额外的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
Run Code Online (Sandbox Code Playgroud)
这可能是由于嵌套函数版本中涉及的操作码更少:
>>> 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
Run Code Online (Sandbox Code Playgroud)
Ned*_*der 14
将函数工厂与类进行比较是比较苹果和橙子.如果您有一个紧密的数据和函数集合,则使用一个类,一起称为对象.如果需要函数,请使用函数工厂,并希望参数化其创建.
您对这两种技术的选择应取决于代码的含义.