Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `counter = 1` Di Dalam Fungsi Menyebabkan `UnboundLocalError` dalam Python?

Mengapakah `counter = 1` Di Dalam Fungsi Menyebabkan `UnboundLocalError` dalam Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-15 00:32:14122semak imbas

Why Does `counter  = 1` Inside a Function Cause an `UnboundLocalError` in Python?

UnboundLocalError dalam Penutupan: Analisis

UnboundLocalError berlaku apabila pembolehubah yang digunakan dalam kod fungsi tidak ditakrifkan secara setempat, global atau sebagai sebahagian daripada blok bukan tempatan. Pertimbangkan kod berikut:

counter = 0

def increment():
  counter += 1

increment()

Menjalankan kod ini akan menghasilkan UnboundLocalError. Mengapa ini berlaku?

Memahami Skop Pembolehubah Python

Python secara dinamik menentukan skop pembolehubah berdasarkan tugasan. Jika pembolehubah ditetapkan dalam fungsi, ia dianggap setempat untuk fungsi itu. Dalam contoh kami, pembilang tugasan = 1 dalam increment() secara tersirat mentakrifkan pembilang sebagai setempat untuk fungsi itu.

Pembolehubah Setempat lwn. Global

Python membezakan antara tempatan dan pembolehubah global. Pembolehubah global diisytiharkan pada peringkat modul dan boleh diakses sepanjang program. Pembolehubah tempatan, sebaliknya, dicipta dalam fungsi dan hanya wujud dalam fungsi tersebut.

Dalam kes kami, kaunter tidak ditakrifkan secara global. Ralat berlaku kerana Python cuba membaca nilai pembilang daripada skop tempatan kenaikan() sebelum ia ditetapkan, maka UnboundLocalError.

Menyelesaikan Ralat

Untuk menyelesaikan ralat ini, anda boleh melakukan salah satu daripada berikut:

  • Gunakan Kata Kunci global: Untuk pembolehubah yang sepatutnya boleh diakses di dalam fungsi dan di luarnya, gunakan kata kunci global. Ini mengisytiharkan pembolehubah sebagai global, membenarkannya untuk diakses daripada mana-mana skop.
  • Gunakan bukan tempatan (Python 3.x sahaja): Kata kunci ini digunakan untuk mengisytiharkan pembolehubah sebagai bukan tempatan, bermakna bahawa ia bukan setempat kepada fungsi semasa tetapi boleh diakses dalam fungsi tidak bersarang yang disertakan.

Atas ialah kandungan terperinci Mengapakah `counter = 1` Di Dalam Fungsi Menyebabkan `UnboundLocalError` dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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