小编典典

python工厂函数与类的比较

python

只是通过学习python并开始研究嵌套/工厂函数(简单示例):

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

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


阅读 210

收藏
2020-12-20

共1个答案

小编典典

我最喜欢嵌套函数的地方是,它比类少冗长。与您的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
2020-12-20