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

Bagaimanakah Kata Kunci `nonlocal` Python Berbeza daripada `global` dalam Skop Fungsi Bersarang?

DDD
Lepaskan: 2024-12-19 22:05:11
asal
1002 orang telah melayarinya

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

Kuasa "bukan tempatan" dalam Python 3

Dalam pengaturcaraan Python, pembolehubah boleh dikelaskan mengikut skopnya:

  • Global: Boleh diakses sepanjang keseluruhan program, termasuk bersarang fungsi.
  • Tempatan: Ditakrifkan dan boleh diakses hanya dalam fungsi atau blok tertentu.

Walau bagaimanapun, kadangkala anda perlu merapatkan jurang antara skop ini. Di sinilah kata kunci "bukan tempatan" dimainkan.

Memahami "bukan tempatan"

"bukan tempatan" digunakan dalam Python 3 untuk mengisytiharkan pembolehubah yang wujud dalam skop yang lebih luas tetapi tidak diisytiharkan sebagai global. Ia membolehkan anda mengakses dan mengubah suai pembolehubah daripada fungsi tertutup tanpa menjejaskan pembolehubah global dengan nama yang sama.

Impak "bukan tempatan"

Untuk menggambarkan perbezaan, pertimbangkan contoh berikut tanpa "nonlocal":

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

Output:

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

Dalam kes ini, pembolehubah x dalam fungsi inner() dianggap sebagai pembolehubah tempatan baharu, bebas daripada x dalam outer() dan x global.

Sekarang, mari kita ubah suai kod menggunakan "nonlocal":

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

Output:

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

Dalam senario ini, kata kunci "nonlocal" membenarkan pembolehubah x dalam fungsi inner() untuk merujuk dan mengubah suai pembolehubah x dalam fungsi outer(). Pengubahsuaian yang dibuat dalam fungsi inner() kekal dalam fungsi outer().

Perbezaan daripada "global"

"nonlocal" berbeza daripada kata kunci "global" kerana ia membenarkan akses dan pengubahsuaian pembolehubah daripada skop tertutup, manakala "global" mengakses dan mengubah suai pembolehubah daripada yang benar-benar global skop.

Menggunakan "global" dalam contoh di atas akan menghasilkan output berikut:

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

Dalam kes ini, pembolehubah x dalam fungsi inner() akan terikat pada global x dan sebarang perubahan akan menjejaskan nilai pembolehubah global, dan bukannya nilai di luar() fungsi.

Kesimpulan

"bukan tempatan" menyediakan mekanisme yang berkuasa untuk mengakses dan mengubah suai pembolehubah daripada skop tertutup dalam Python 3. Ia membolehkan anda mengelakkan perangkap mengubah suai global pembolehubah dalam fungsi bersarang dan mengekalkan struktur kod yang lebih teratur dan modular.

Atas ialah kandungan terperinci Bagaimanakah Kata Kunci `nonlocal` Python 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan