Bagaimana untuk Menyelesaikan UnboundLocalError dalam Skop Fungsi Bersarang dalam Python?

Susan Sarandon
Lepaskan: 2024-10-21 18:45:02
asal
999 orang telah melayarinya

How to Resolve UnboundLocalError in Nested Function Scopes in Python?

UnboundLocalError dalam Skop Fungsi Bersarang

Dalam Python, mengakses pembolehubah yang ditakrifkan dalam fungsi luar daripada fungsi bersarang kadangkala boleh menghasilkan UnboundLocalError. Pertimbangkan contoh berikut:

<code class="python">def outer():
    ctr = 0

    def inner():
        ctr += 1

    inner()</code>
Salin selepas log masuk

Menjalankan kod ini akan menimbulkan UnboundLocalError untuk pembolehubah ctr dalam fungsi dalam. Ralat ini berlaku kerana Python menganggap ctr sebagai pembolehubah tempatan dalam fungsi dalaman, walaupun ia ditakrifkan dalam fungsi luar. Untuk menyelesaikan isu ini, kita perlu menggunakan mekanisme yang membenarkan fungsi dalaman mengakses skop fungsi luar.

Penyelesaian:

Python 3 memperkenalkan pernyataan bukan tempatan, yang membenarkan pengubahsuaian pembolehubah bukan tempatan. Dengan menambahkan bukan tempatan pada fungsi dalam, kami secara eksplisit mengisytiharkan ctr sebagai pembolehubah bukan setempat, membenarkan penjilidannya semula dalam fungsi dalam.

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>
Salin selepas log masuk

Sebagai alternatif, dalam Python 2, yang tidak mempunyai bukan tempatan pernyataan, kita boleh menyelesaikan isu ini dengan melampirkan pemboleh ubah pembilang dalam senarai atau struktur data lain untuk mengelakkan nama kosong diikat semula:

<code class="python">ctr = [0]

def inner():
    ctr[0] += 1</code>
Salin selepas log masuk

Pendekatan ini mengekalkan nilai ctr dalam senarai ctr, menghalang UnboundLocalError daripada berlaku.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan UnboundLocalError dalam Skop Fungsi Bersarang dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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!