Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Kata Kunci `nonlocal` Python Berbeza daripada `global` dalam Mengubah Ubah Pembolehubah?

Bagaimanakah Kata Kunci `nonlocal` Python Berbeza daripada `global` dalam Mengubah Ubah Pembolehubah?

Linda Hamilton
Linda Hamiltonasal
2024-12-21 04:59:131024semak imbas

How Does Python's `nonlocal` Keyword Differ from `global` in Modifying Variables?

Memahami "bukan tempatan" dalam Python 3

Tidak seperti bahasa tradisional, Python membenarkan fungsi bersarang untuk mengakses pembolehubah yang ditakrifkan dalam skop luarnya. Walau bagaimanapun, mengakses pembolehubah yang tidak diisytiharkan dalam fungsi bersarang (iaitu, pembolehubah bukan setempat) boleh membawa kepada kelakuan yang tidak dijangka.

Kata Kunci "bukan setempat"

Dalam Python 3, kata kunci "bukan tempatan" membolehkan anda mengubah suai pembolehubah yang diisytiharkan dalam skop luar dari dalam fungsi bersarang. Dengan menggunakan "bukan tempatan", anda mengisytiharkan bahawa pembolehubah yang anda ubah suai adalah bukan tempatan dan tergolong dalam skop luar.

Cara "bukan tempatan" Berfungsi

Pertimbangkan mengikuti kod tanpa menggunakan "nonlocal":

x = 0

def outer():
    x = 1

    def inner():
        x = 2
        print("inner:", x)

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

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

Output:

inner: 2
outer: 1
global: 0

Dalam contoh ini, pembolehubah x dalam fungsi dalam membayangi pembolehubah fungsi luar x, menyebabkan nilai 2 diberikan kepada x dalam fungsi dalaman. Pembolehubah fungsi luar x tidak terjejas.

Menggunakan "bukan tempatan"

Untuk mengubah suai pembolehubah fungsi luar x daripada fungsi dalam, kita boleh menggunakan "bukan tempatan" sebagai berikut:

x = 0

def outer():
    x = 1

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

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

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

Output:

inner: 2
outer: 2
global: 0

Dalam kes ini, kata kunci "bukan setempat" membenarkan fungsi dalam mengakses dan mengubah suai pembolehubah fungsi luar x. Akibatnya, nilai x dalam fungsi luar ditukar kepada 2.

Perbandingan dengan "global"

Tidak seperti "bukan tempatan", kata kunci "global" merujuk kepada pembolehubah yang tergolong dalam skop global. Menggunakan "global" akan mengikat pembolehubah dalam fungsi dalaman kepada pembolehubah global, tanpa mengira kehadiran pembolehubah tempatan lain dengan nama yang sama:

x = 0

def outer():
    x = 1

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

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

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

Output:

inner: 2
outer: 1
global: 2

Oleh itu, "bukan tempatan" harus digunakan apabila anda ingin mengubah suai pembolehubah yang diisytiharkan dalam skop luar, manakala "global" harus digunakan apabila mengakses pembolehubah daripada skop global.

Atas ialah kandungan terperinci Bagaimanakah Kata Kunci `nonlocal` Python Berbeza daripada `global` dalam Mengubah Ubah Pembolehubah?. 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