Bagaimanakah Pengisytiharan Hadapan Boleh Membantu Mencegah NameError untuk Fungsi yang Ditakrifkan Kemudian dalam Python?

Patricia Arquette
Lepaskan: 2024-10-27 11:54:30
asal
673 orang telah melayarinya

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

Majukan Pengisytiharan dalam Python untuk Mencegah NameRalat untuk Fungsi yang Ditakrifkan Kemudian

Dalam Python, cubaan memanggil fungsi sebelum ia ditakrifkan boleh menyebabkan dalam NameError. Walaupun penyusunan semula kod mungkin kelihatan seperti satu-satunya penyelesaian, terdapat pendekatan alternatif.

Salah satu kaedah ialah mengisytiharkan ke hadapan sesuatu fungsi dengan membungkus seruannya dalam fungsi yang berasingan. Ini membolehkan fungsi dipanggil sebelum ia ditakrifkan tanpa mencetuskan NameError.

Sebagai contoh, kod berikut akan gagal:

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

Oleh kerana fungsi cmp_configs belum ditakrifkan lagi. Untuk mengisytiharkannya ke hadapan, kita boleh membungkus invokasi:

<code class="python">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():
    ...</code>
Salin selepas log masuk

Kini, fungsi forward_declare_cmp_configs() boleh dipanggil sebelum cmp_configs() ditakrifkan dan kod asal akan dilaksanakan tanpa ralat.

Satu lagi senario di mana pengisytiharan hadapan berguna adalah dalam fungsi rekursif. Sebagai contoh, kod berikut akan gagal:

<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>
Salin selepas log masuk

Untuk mengisytiharkan ke hadapan panggilan rekursif, kita boleh menggunakan pendekatan fungsi bersarang:

<code class="python">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()()</code>
Salin selepas log masuk

Ingat, manakala pengisytiharan hadapan boleh berguna, peraturan am dalam Python ialah mentakrifkan fungsi sebelum penggunaan pertamanya.

Atas ialah kandungan terperinci Bagaimanakah Pengisytiharan Hadapan Boleh Membantu Mencegah NameError untuk Fungsi yang Ditakrifkan Kemudian dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!