私は助けが必要なところまで自分自身を混乱させました:
実行するクロージャーのリストがあるとします。このようなクロージャーの実行時に、特定の条件が満たされた場合、リストからそれ自体を削除したいと考えています。次の点を考慮してください。
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()
実際には、ラムダの実行を自分で制御できないため、次のようなことは言えません。
my_lambdas = [l for l in my_lambdas if l()]
ラムダの実行を制御できる関数にラップして、その単一のラッパー関数のみをホストアプリケーションに渡すことは可能だと思いますが、可能であれば、その追加の間接化を避けたいと思います。
どんな助けでも大歓迎です、ありがとう!