Kuasa "bukan tempatan" dalam Python 3
Dalam pengaturcaraan Python, pembolehubah boleh dikelaskan mengikut skopnya:
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)
Output:
inner: 2 outer: 1 global: 0
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)
Output:
inner: 2 outer: 2 global: 0
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
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!