python工厂函数与类相比

时间:2009-05-23 16:43:25

标签: python function

正在学习python并开始研究嵌套/工厂函数(简单示例):

def maker(N):
    def action(X):
        return X * N
    return action

工厂功能相比创建类有什么优势吗?性能?记忆?清理?

3 个答案:

答案 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。生成的函数取决于在创建时绑定的变量,之后不需要更改。因此,为此目的使用类会使更少感觉。