Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah Kata Kunci `bukan tempatan` Python 3 Berbeza daripada `global` dalam Skop Fungsi Bersarang?

Bagaimanakah Kata Kunci `bukan tempatan` Python 3 Berbeza daripada `global` dalam Skop Fungsi Bersarang?

Patricia Arquette
Lepaskan: 2024-12-15 01:56:09
asal
129 orang telah melayarinya

How Does Python 3's `nonlocal` Keyword Differ from `global` in Nested Function Scopes?

Kata Kunci "bukan tempatan" Python 3: A Deep Dive

Kata kunci "nonlocal" mempunyai tujuan yang berharga dalam Python 3, menyediakan akses kepada pembolehubah diisytiharkan dalam skop yang disertakan tanpa menggunakan kata kunci global yang dikhaskan. Fungsi bernuansa ini membolehkan kawalan luar biasa ke atas rujukan pembolehubah dalam fungsi bersarang.

Menyingkap Peranan bukan tempatan

Pertimbangkan coretan kod berikut tanpa kata kunci "bukan tempatan":

x = 0
def outer():
    x = 1
    def inner():
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)
Salin selepas log masuk

Apabila dilaksanakan, kod ini menghasilkan yang berikut output:

inner: 2
outer: 1
global: 0
Salin selepas log masuk

Seperti yang anda boleh perhatikan, pembolehubah "x" dalam fungsi dalam adalah bebas daripada pembolehubah "x" dalam fungsi luar. Ini kerana pembolehubah "x" fungsi dalaman diutamakan dalam skopnya sendiri.

Sebaliknya, memperkenalkan kata kunci "bukan tempatan" mengubah tingkah laku:

x = 0
def outer():
    x = 1
    def inner():
        nonlocal x
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)
Salin selepas log masuk

Dengan pengubahsuaian ini, output berubah kepada:

inner: 2
outer: 2
global: 0
Salin selepas log masuk

Kata kunci "bukan tempatan" membenarkan fungsi dalaman untuk merujuk dan mengubah suai Pembolehubah "x" yang diisytiharkan dalam fungsi luar.

bukan tempatan lwn global

Adalah penting untuk mengambil perhatian perbezaan antara "bukan tempatan" dan "global". Walaupun kedua-dua kata kunci membenarkan pembolehubah diakses daripada skop bersarang, kata kunci tersebut mempunyai tujuan yang berbeza. "nonlocal" mengehadkan akses kepada pembolehubah yang ditakrifkan hanya dalam skop yang dilampirkan, manakala "global" menyediakan akses kepada pembolehubah yang ditakrifkan dalam skop global.

Untuk pemahaman yang lebih baik, pertimbangkan kod berikut menggunakan kata kunci "global":

x = 0
def outer():
    x = 1
    def inner():
        global x
        x = 2
        print("inner:", x)
        
    inner()
    print("outer:", x)

outer()
print("global:", x)
Salin selepas log masuk

Dalam kes ini, output menjadi:

inner: 2
outer: 1
global: 2
Salin selepas log masuk

"global" kata kunci mengikat "x" kepada pembolehubah yang diisytiharkan secara global sebenar, mengatasi mana-mana pembolehubah tempatan atau tertutup dengan nama yang sama.

Kesimpulan

Kata kunci "bukan tempatan" dalam Python 3 menawarkan alat yang berkuasa untuk mengurus rujukan pembolehubah dalam fungsi bersarang. Ia membolehkan pembolehubah yang diisytiharkan dalam skop tertutup boleh diakses dan diubah suai dalam skop dalaman, memberikan tahap kawalan yang lebih halus ke atas penggunaan pembolehubah dalam struktur kod yang kompleks.

Atas ialah kandungan terperinci Bagaimanakah Kata Kunci `bukan tempatan` Python 3 Berbeza daripada `global` dalam Skop Fungsi Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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