我最喜欢嵌套函数的地方是,它比类少冗长。与您的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__) 50 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) 30 LOAD_FAST 0 (X) 3 LOAD_DEREF 0 (N) 6 BINARY_MULTIPLY 7 RETURN_VALUE
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)