Memahami Ralat Pembolehubah Setempat Tidak Terikat dalam Penutupan
Apabila menulis kod menggunakan penutupan, adalah penting untuk mempertimbangkan skop pembolehubah. Dalam kes ini, persoalan timbul tentang mengapa UnboundLocalError berlaku dalam kod berikut:
counter = 0 def increment(): counter += 1 increment()
Untuk menjawab soalan ini, kita mesti terlebih dahulu memahami konsep penutupan dalam Python. Penutupan ialah fungsi yang mengekalkan akses kepada pembolehubah yang ditakrifkan dalam skop yang ditakrifkan, walaupun selepas skop telah dikeluarkan. Dalam kes ini, pembolehubah pembilang ditakrifkan dalam skop global dan dirujuk dalam fungsi increment(), yang dianggap sebagai penutupan.
Walau bagaimanapun, dalam Python, pembolehubah dalam fungsi dianggap secara automatik sebagai pembolehubah tempatan melainkan dinyatakan sebaliknya secara jelas. Apabila pembilang baris = 1 dilaksanakan dalam increment(), penterjemah cuba untuk menambah pembolehubah pembilang tempatan. Walau bagaimanapun, oleh kerana tiada nilai telah ditetapkan untuk membalas dalam fungsi increment(), ia kekal tidak terikat. Ini mengakibatkan UnboundLocalError dibangkitkan.
Untuk menyelesaikan isu ini, terdapat dua pendekatan utama:
counter = 0 def increment(): global counter counter += 1 increment()
counter = 0 def increment(): nonlocal counter counter += 1 increment()
Atas ialah kandungan terperinci Mengapakah `counter = 1` Di Dalam Penutupan Menyebabkan `UnboundLocalError` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!