Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengakses Pembolehubah Bukan Tempatan daripada Fungsi Bersarang dalam Python?

Bagaimana untuk Mengakses Pembolehubah Bukan Tempatan daripada Fungsi Bersarang dalam Python?

DDD
DDDasal
2024-10-21 18:38:29918semak imbas

How to Access Nonlocal Variables from Nested Functions in Python?

Mengakses Pembolehubah Bukan Setempat dalam Skop Fungsi Bersarang

Dalam Python, skop fungsi bersarang menyediakan akses kepada skop yang disertakan. Walau bagaimanapun, percubaan untuk mengubah suai pembolehubah dalam skop tertutup dalam fungsi bersarang boleh mengakibatkan UnboundLocalError.

Untuk menangani isu ini, anda mempunyai beberapa pilihan:

1. Menggunakan Kata Kunci 'nonlocal' (Python 3 ):

Untuk Python 3 dan seterusnya, kata kunci bukan tempatan membolehkan anda mengikat semula pembolehubah bukan tempatan dalam fungsi bersarang.

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

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>

2. Akses Tidak Langsung melalui Senarai (Python 2 dan 3):

Dalam kedua-dua Python 2 dan 3, anda boleh menggunakan senarai untuk menahan pembolehubah dan menambahnya secara tidak langsung dalam fungsi bersarang.

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

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

3. Menggunakan Pembolehubah Global (Tidak Disyorkan):

Walaupun menggunakan global boleh membenarkan akses kepada pembolehubah daripada melampirkan skop, ia biasanya tidak digalakkan kerana potensi konflik dan isu kebolehbacaan kod.

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

    def inner():
        ctr += 1</code>

Memilih penyelesaian yang sesuai bergantung pada versi Python khusus anda dan pertimbangan reka bentuk untuk kod anda.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Pembolehubah Bukan Tempatan daripada Fungsi Bersarang 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