我有一些舊代碼,我在Python中將函數列表存儲爲類屬性。這些列表被用作一種事件掛鉤。Python單線程調用函數列表
要用適當的參數調用列表中的每個函數,我已經使用了單行,將map
與lambda
表達式混合使用。我現在擔心在使用lambda
這樣的表達式時會產生不必要的開銷。我推薦使用map
和lambda
這兩個表達式,並且只是使用循環標準來提高可讀性。
雖然有更好的(讀得更快)單線程來做到這一點,但?
例如:
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
電話?
'operator.methodcaller'對我來說是一個新的:)但我不確定我會使用它,爲了清晰起見。感謝關於Python3中的map的警告。 –