ループの中で関数を一度だけ実行させる効率的な方法
2023-08-13 10:30:27
質問
今のところ、以下のようなことをしているのですが、面倒になってきました。
run_once = 0
while 1:
if run_once == 0:
myFunction()
run_once = 1:
もっと受け入れられる処理方法があると思うのですが?
私が探しているのは、ある関数を一度だけ、必要に応じて実行させることです。たとえば、特定のボタンが押されたときなどです。これは、ユーザーが制御する多くのスイッチを持っている対話型アプリです。すべてのスイッチに対してジャンク変数を持つことは、それが実行されたかどうかを追跡するためだけであり、ちょっと非効率的に思えたのです。
どのように解決するのですか?
関数にデコレータを使用して、実行回数を追跡する処理を行いますね。
def run_once(f):
def wrapper(*args, **kwargs):
if not wrapper.has_run:
wrapper.has_run = True
return f(*args, **kwargs)
wrapper.has_run = False
return wrapper
@run_once
def my_function(foo, bar):
return foo+bar
現在
my_function
は一度だけ実行されます。他の呼び出しを行なうと
None
. 単に
else
節を
if
を追加してください。あなたの例では、何も返す必要はありません。
関数の作成をコントロールしない場合、あるいは関数を他のコンテキストで普通に使用する必要がある場合は、同様にデコレータを手動で適用することができます。
action = run_once(my_function)
while 1:
if predicate:
action()
これは
my_function
を他の用途に使えるようにします。
最後に、もし2回だけ実行すればよいのであれば、単に
action = run_once(my_function)
action() # run once the first time
action.has_run = False
action() # run once the second time
関連
-
[解決済み] Pythonでリストを回転させる効率的な方法
-
[解決済み] FORループとIF文の組み合わせのPythonicな方法
-
[解決済み】pandasでdataframeをループする最も効率的な方法は何ですか?
-
[解決済み】numpyの配列を逆引きする最も効率的な方法
-
[解決済み] Pythonの最も効率的な方法は、リスト内の最長文字列を選択することですか?
-
[解決済み】matplotlibのレジェンドマーカーが一度だけ表示される。
-
[解決済み】Djangoの起動時にコードを実行するのは1回だけ?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] if 節の終了方法
-
[解決済み] Python 言語を決定するには?
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?