Python で後から定義された関数を呼び出すときに、NameError を回避するにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2024-10-30 16:04:17
オリジナル
237 人が閲覧しました

How Can You Avoid NameErrors When Calling Functions Defined Later in Python?

NameError を防ぐための前方宣言関数

コード内で後から定義された関数を呼び出そうとしたときに、NameError 例外が発生するとイライラすることがあります。 Python の定義順序では、一般に宣言前に関数を使用することが禁止されていますが、この制限は特定の手法を使用して回避できます。

たとえば、まだ定義されていないカスタム cmp_configs 関数を使用してリストを並べ替えるには、Python の即時function 機能を使用できます:

<code class="python">print("\n".join([str(bla) for bla in sorted(mylist, cmp=cmp_configs)]))

def cmp_configs(x, y):
    ...  # Function implementation</code>
ログイン後にコピー

このシナリオでは、ソートされた関数呼び出しが別の関数内にラップされ、cmp_configs 定義の当面の必要性が解決されます。外側の関数が呼び出されると、sorted と cmp_configs の両方が定義され、適切な実行が保証されます。

前方宣言関数が必要となるもう 1 つの一般的な状況は、再帰です。次の例を考えてみましょう:

<code class="python">def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()</code>
ログイン後にコピー

この再帰パターンが発生した場合、スパムの前に Egg 定義を移動すれば問題が解決すると考えるかもしれません。ただし、2 つの関数間の循環依存関係により、このアプローチでも NameError が発生します。

この特定の状況に対処するには、カスタム関数を Egg 関数自体の中に配置できます。

<code class="python">def eggs():
    if end_condition():
        return end_result()
    else:
        def spam():
            if end_condition():
                return end_result()
            else:
                return eggs()
        return spam()  # Explicitly calling the inner 'spam' function</code>
ログイン後にコピー

別の方法として、ラムダ式を使用しても同じ結果を得ることができます。

<code class="python">def eggs():
    if end_condition():
        return end_result()
    else:
        return lambda: spam()  # Returns a callable object that implements spam</code>
ログイン後にコピー

要約すると、一般的には関数を使用する前に定義するという原則に従っていますが、関数の前方宣言が避けられないシナリオもあります。 。プログラマーは即時関数またはラムダ式を利用することで、これらの制限を回避し、機能を損なうことなく目的のコード構造を維持できます。

以上がPython で後から定義された関数を呼び出すときに、NameError を回避するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!