我有一些旧代码,我将 Python 中的函数列表存储为类属性。这些列表用作一种事件挂钩。
为了使用适当的参数调用列表中的每个函数,我使用了单行代码,map
并与lambda
表达式混合。我现在担心使用lambda
这样的表达式会产生不必要的开销。我想推荐的方法是同时删除map
andlambda
并且只使用标准 for 循环,以提高可读性。
不过,有没有更好(阅读速度更快)的单行代码来做到这一点?
例如:
class Foo:
"""Dummy class demonstrating event hook usage."""
pre = [] # list of functions to call before entering loop.
mid = [] # list of functions to call inside loop, with value
post = [] # list of functions to call after loop.
def __init__(self, verbose=False, send=True):
"""Attach functions when initialising class."""
self._results = []
if verbose:
self.mid.append( self._print )
self.mid.append( self._store )
if send:
self.post.append( self._send )
def __call__(self, values):
# call each function in self.pre (no functions there)
map( lambda fn: fn(), self.pre )
for val in values:
# call each function in self.mid, with one passed argument
map( lambda fn: fn(val), self.mid )
# call each fn in self.post, with no arguments
map( lambda fn: fn(), self.post )
def _print(self, value):
"""Print argument, when verbose=True."""
print value
def _store(self, value):
"""Store results"""
self._results.append(value)
def _send(self):
"""Send results somewhere"""
# create instance of Foo
foo = Foo(verbose=True)
# equivalent to: foo.__call__( ... )
foo( [1, 2, 3, 4] )
有没有更好的方法来编写这些单行map
电话?