リストや辞書などのデータ構造に関数を効果的に格納および取得するにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2024-10-30 01:40:29
オリジナル
671 人が閲覧しました

How can we effectively store and retrieve functions in data structures like lists and dictionaries?

データ構造への関数の保存と呼び出し

プログラミングでは、効率的に実行するために関数を整理して管理する必要があることがよくあります。一般的なアプローチの 1 つは、関数をリストや辞書などのデータ構造に格納し、それらを動的に参照したり呼び出したりできるようにすることです。しかし、次のような疑問が生じます: これらの構造体に関数を効果的に格納および取得するにはどうすればよいでしょうか?

たとえば、次のアプローチを考えてみましょう:

<code class="python">mydict = {
    'funcList1': [foo(), bar(), goo()],
    'funcList2': [foo(), goo(), bar()]}</code>
ログイン後にコピー

このアプローチでは、関数の結果を格納しようとします。辞書内の呼び出し (つまり、値の戻り値) を実行しますが、期待どおりに動作しません。代わりに、実際の関数オブジェクト自体を保存する方法が必要です。

Python では、関数はファーストクラスのオブジェクトです。つまり、関数は値として扱われ、データ構造に保存できます。関数を辞書に効果的に格納するには、関数オブジェクトを戻り値ではなくキーに割り当てる必要があります。例:

<code class="python">dispatcher = {'foo': foo, 'bar': bar}</code>
ログイン後にコピー

ここで、foo と bar は関数オブジェクトです。

このディクショナリから関数を呼び出すには、そのキーを使用して関数を呼び出すだけです:

<code class="python">dispatcher['foo']()  # calls the foo function</code>
ログイン後にコピー

リストに格納された複数の関数を実行する必要がある場合は、ヘルパー関数を使用してリストを反復処理し、各関数を呼び出すことができます。

<code class="python">dispatcher = {'foobar': [foo, bar], 'bazcat': [baz, cat]}

def fire_all(func_list):
    for f in func_list:
        f()

fire_all(dispatcher['foobar'])</code>
ログイン後にコピー

このアプローチにより、関数を動的に整理して呼び出すことができ、容易になります。コードを整理し、必要な def ステートメントの数を削減します。

以上がリストや辞書などのデータ構造に関数を効果的に格納および取得するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート