「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 前方宣言は、Python で後で定義される関数の NameError を防ぐのにどのように役立ちますか?

前方宣言は、Python で後で定義される関数の NameError を防ぐのにどのように役立ちますか?

2024 年 11 月 9 日に公開
ブラウズ:749

How Can Forward Declarations Help Prevent NameErrors for Functions Defined Later in Python?

後で定義される関数の名前エラーを防ぐための Python での前方宣言

Python では、関数が定義される前に関数を呼び出そうとすると、 NameError で。コードの再編成が唯一の解決策のように思えるかもしれませんが、別のアプローチもあります。

1 つの方法は、関数の呼び出しを別の関数内でラップすることによって関数を前方宣言することです。これにより、NameError を引き起こすことなく、定義される前に関数を呼び出すことができます。

たとえば、次のコードは失敗します。

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

cmp_configs 関数がまだ定義されていないためです。これを前方宣言するには、呼び出しをラップします:

def forward_declare_cmp_configs():
    print("\n".join([str(bla) for bla in sorted(mylist, cmp = cmp_configs)]))

forward_declare_cmp_configs()

def cmp_configs():
    ...

これで、cmp_configs() が定義される前に forward_declare_cmp_configs() 関数を呼び出すことができ、元のコードはエラーなしで実行されます。

前方宣言が役立つ別のシナリオは次のとおりです。再帰関数。たとえば、次のコードは失敗します:

def spam():
    if end_condition():
        return end_result()
    else:
        return eggs()

def eggs():
    if end_condition():
        return end_result()
    else:
        return spam()

再帰呼び出しを前方宣言するには、ネストされた関数のアプローチを使用できます:

def spam_outer():
    def spam_inner():
        if end_condition():
            return end_result()
        else:
            return eggs()

    def eggs():
        if end_condition():
            return end_result()
        else:
            return spam_inner()

    return spam_inner()

spam_outer()()

前方宣言は便利ですが、Python の一般的なルールは、関数を最初に使用する前に定義することであることに注意してください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3