Nama Tidak Terikat dalam Python: Memahami UnboundLocalError
Apabila menemui nama dalam Python, jurubahasa menyemak status pengikatannya dalam skop semasa. Jika nama tidak terikat pada nilai, ralat akan dibangkitkan. Memahami cara pengikatan nama berfungsi adalah penting untuk mengelakkan ralat sedemikian.
Sifat Nama Tempatan Tidak Terikat
Ralat Tidak Terikat timbul apabila pembolehubah setempat dirujuk sebelum ia ditetapkan nilai atau sebelum sebarang operasi mengikat (cth., penetapan, parameter fungsi) telah berlaku. Keadaan ini boleh berlaku apabila pernyataan bersyarat menghalang operasi pengikatan daripada dilaksanakan.
Pertimbangkan coretan kod berikut:
def foo(): if False: spam = 'eggs' print(spam)
Dalam contoh ini, pembolehubah spam tidak terikat dalam if blok pernyataan kerana keadaan dinilai kepada False. Apabila jurubahasa menemui pernyataan cetakan, ia menimbulkan UnboundLocalError kerana ia tidak dapat mengesan nilai terikat untuk spam.
Operasi Mengikat
Dalam Python, operasi mengikat mewujudkan skop daripada sebuah nama. Operasi ini termasuk:
Global dan Tempatan Pengikatan
Nama tempatan terikat dalam skop tertentu, biasanya fungsi atau blok bersarang. Nama global, sebaliknya, terikat di luar mana-mana skop fungsi dan boleh diakses dari mana-mana titik dalam program. Untuk mengisytiharkan pembolehubah sebagai global secara eksplisit, kata kunci global mesti digunakan dalam skop fungsi.
Sebagai contoh, pertimbangkan coretan kod berikut:
foo = None def bar(): foo = 'spam' print(foo)
Kod ini menimbulkan UnboundLocalError kerana foo sedang terikat dalam skop fungsi bar. Untuk membetulkannya, foo mesti diisytiharkan sebagai pembolehubah global dalam fungsi:
foo = None def bar(): global foo foo = 'spam' print(foo)
Ringkasan
UnboundLocalErrors berlaku apabila pembolehubah tempatan dirujuk sebelum diikat kepada suatu nilai. Memahami operasi mengikat dan konsep nama global dan tempatan adalah penting untuk mengelakkan ralat ini. Dengan mengurus pengikatan nama dengan betul, pengaturcara Python boleh memastikan kod mereka dilaksanakan tanpa ralat yang berkaitan dengan nama tidak terikat.
Atas ialah kandungan terperinci Mengapa Python Meningkatkan UnboundLocalError?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!