辞書を使って実行する機能を選択する
2023-09-15 15:07:39
質問
関数型プログラミングを使用して、キーと実行する関数を含む辞書を作成しようとしています。
myDict={}
myItems=("P1","P2","P3",...."Pn")
def myMain(key):
def ExecP1():
pass
def ExecP2():
pass
def ExecP3():
pass
...
def ExecPn():
pass
さて、モジュール内で定義された関数を見つけるために使われるコードを見ましたが、私はこのようなことをする必要があります。
for myitem in myItems:
myDict[myitem] = ??? #to dynamically find the corresponding function
そこで質問ですが、どのようにすればすべての
Exec
関数のリストを作成し、それを辞書を使って目的のアイテムに割り当てるにはどうしたらよいでしょうか。
myDict["P1"]() #this will call ExecP1()
私の本当の問題は、これらの項目が大量にあることで、それらを処理するライブラリを作って、最終的なユーザが
myMain("P1")
私はinspectモジュールを使用すると思いますが、私はそれを行う方法があまりよくわかりません。
私の避けるべき理由。
def ExecPn():
pass
myDict["Pn"]=ExecPn
は、アプリケーション内でスクリプト機能を提供するために使用しているため、コードを保護しなければならないことです。
どのように解決するのですか?
自慢にはなりませんが
def myMain(key):
def ExecP1():
pass
def ExecP2():
pass
def ExecP3():
pass
def ExecPn():
pass
locals()['Exec' + key]()
しかし、私はそれらをモジュールやクラスの何かに入れることをお勧めします。これは本当に恐ろしいことです。
もし、関数ごとにデコレータを追加してもいいのであれば、各関数を辞書に追加するデコレータを定義すればいいのです。
def myMain(key):
tasks = {}
def task(task_fn):
tasks[task_fn.__name__] = task_fn
@task
def ExecP1():
print(1)
@task
def ExecP2():
print(2)
@task
def ExecP3():
print(3)
@task
def ExecPn():
print(4)
tasks['Exec' + key]()
もう一つの方法は、すべての関数をクラスの下に(あるいは別のモジュールの中に)置き、その中で
getattr
:
def myMain(key):
class Tasks:
def ExecP1():
print(1)
def ExecP2():
print(2)
def ExecP3():
print(3)
def ExecPn():
print(4)
task = getattr(Tasks, 'Exec' + key)
task()
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書から要素を削除する
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】1行コマンドラインで複数行のステートメントを実行?
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] DataFrameに日付間の日数カラムを追加する pandas
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] Pythonの辞書にあるスレッドセーフについて