我把自己弄糊涂了,以至于我需要帮助:
假设我有一个要执行的闭包列表。在执行这样的闭包时,如果满足某个条件,我希望它从列表中删除自己。考虑以下:
my_lambdas = []
def some_condition_is_met(n): return n > 5
def my_function(n):
if some_condition_is_met(n):
# Remove me from my_lambdas, but how?
return False
print(n)
return True
def make_me_a_lambda(n):
# Alternatively do removal based on the return value:
return lambda: my_function(n) or remove_me_but_how()
my_lambdas.append(make_me_a_lambda(1))
my_lambdas.append(make_me_a_lambda(7))
for l in my_lambdas: l()
实际上,我自己无法控制 lambdas 的执行,所以我不能说这样的话:
my_lambdas = [l for l in my_lambdas if l()]
虽然我想可以将 lambdas 的执行包装在一个我可以控制的函数中,并且只将那个单一的包装函数传递给主机应用程序,但如果可能的话,我想避免这种额外的间接。
非常感谢任何帮助,谢谢!