最近Pythonを学び始めたばかりです。私が達成しようとしていることを説明しましょう。基本的にいくつかの関数 (スクリプトにハードコードされている) をすべて 1 つのリストに追加する必要があるこの .py スクリプトがあるため、次のようにインデックス演算子を使用するだけで必要な関数を取得できます。
必要な関数 = 関数リスト[必要な関数のインデックス]
これを実装する最初の試みは、次のコード構造になりました。
(imports)
function_list = []
(other global variables)
def function_0 = (...)
function_list.append(function_0)
def function_1 = (...)
function_list.append(function_1)
def function_2 = (...)
function_list.append(function_2)
(rest of code)
しかし、それはあまりエレガントではないので、私はその解決策が好きではありません。私の目標は、関数定義を (append 呼び出しなしで) スクリプトに単純に追加できるようにすることです。スクリプトはそれを関数のリストに自動的に追加します。
すべての関数を別の関数内で定義することを考えましたが、それらでどこにも到達できないと思います。各関数にデコレータを「タグ付け」することを考えましたが、関数が呼び出されるたびにデコレータ (正しく理解していれば) が呼び出されることに気付きました。
しばらくして、私はこの解決策を思いつきました:
(imports)
(global variables)
def function_0 = (...)
def function_1 = (...)
def function_2 = (...)
function_list= [globals()[x] for x in globals() if re.match('^function_[0-9]+$', x)]
(rest of code)
解決策としてはもう少し気に入っていますが、唯一の問題は、スクリプトの先頭で function_list を完全に定義することを好むということです。ただし、スクリプトの先頭で globals() を呼び出すと、関数がまだ定義されていないため関数が含まれないため、これを行うことはできません。
おそらく、単純に洗練されていないソリューションに落ち着くべきか、慣用的な方法でスクリプトを書いていないのかもしれません。いずれにせよ、ご意見やご提案をいただければ幸いです。