Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Python Membuang `UnboundLocalError` Apabila Mengubah Pembolehubah Global Di Dalam Fungsi?

Mengapa Python Membuang `UnboundLocalError` Apabila Mengubah Pembolehubah Global Di Dalam Fungsi?

Linda Hamilton
Linda Hamiltonasal
2024-12-24 16:47:13853semak imbas

Why Does Python Throw an `UnboundLocalError` When Modifying a Global Variable Inside a Function?

UnboundLocalError: Tugasan Pembolehubah Diutamakan berbanding Pengisytiharan Global

Apabila menghadapi UnboundLocalError dalam Python, adalah penting untuk memahami keutamaan tugasan pembolehubah berbanding pengisytiharan global. Mari kita teliti butiran menggunakan kod yang disediakan:

a, b, c = (1, 2, 3)

def test():
    print(a)
    print(b)
    print(c)
    c += 1
test()

Sebelum meneroka ralat, mari kita atasi cetakan 'a' dan 'b' yang berjaya. Untuk pembolehubah ini, tiada tugasan dalam fungsi 'test()', jadi Python menganggapnya sebagai pembolehubah global dan mendapatkan semula nilainya dari skop luar.

Walau bagaimanapun, apabila memberikan nilai kepada 'c' dalam fungsi ('c = 1'), Python mencipta pembolehubah tempatan bernama 'c'. Pembolehubah tempatan ini membayangi 'c' global, dan sebarang rujukan seterusnya kepada 'c' dalam fungsi akan merujuk kepada versi tempatan. Oleh itu, apabila baris 'print(c)' dilaksanakan, ia cuba mencetak pembolehubah tempatan yang tidak ditetapkan, menghasilkan 'UnboundLocalError'.

Untuk menangani isu ini, seseorang boleh mengisytiharkan penggunaan global secara eksplisit. 'c' pembolehubah dalam fungsi 'test()' dengan menambah 'global c' sebagai baris pertama. Sebagai alternatif, dalam Python 3, 'nonlocal c' boleh digunakan untuk mengakses skop fungsi lampiran terdekat yang mengandungi pembolehubah bernama 'c'.

Atas ialah kandungan terperinci Mengapa Python Membuang `UnboundLocalError` Apabila Mengubah Pembolehubah Global Di Dalam Fungsi?. 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