Apa yang dilakukan nonlocal
pernyataan Python (dalam Python 3.0 dan yang lebih baru)?
Tidak ada dokumentasi di situs web resmi Python dan help("nonlocal")
juga tidak berfungsi.
Apa yang dilakukan nonlocal
pernyataan Python (dalam Python 3.0 dan yang lebih baru)?
Tidak ada dokumentasi di situs web resmi Python dan help("nonlocal")
juga tidak berfungsi.
"There is no documentation for nonlocal".
Sebenarnya, Anda dapat melakukannyahelp(keyword_in_string)
untuk dokumentasi dengan Python 3 ke atasJawaban:
Bandingkan ini, tanpa menggunakan
nonlocal
:Untuk ini, menggunakan
nonlocal
, di manainner()
'sx
sekarang jugaouter()
' sx
:sumber
Singkatnya, ini memungkinkan Anda menetapkan nilai ke variabel dalam lingkup luar (tetapi non-global). Lihat PEP 3104 untuk semua detail berdarah.
sumber
Pencarian google untuk "python nonlocal" muncul Proposal, PEP 3104 , yang sepenuhnya menggambarkan sintaks dan alasan di balik pernyataan itu. singkatnya, ia bekerja dengan cara yang persis sama dengan
global
pernyataan, kecuali bahwa ia digunakan untuk merujuk ke variabel yang tidak global atau lokal ke fungsi.Inilah contoh singkat tentang apa yang dapat Anda lakukan dengan ini. Penghitung generator dapat ditulis ulang untuk menggunakan ini sehingga lebih mirip idiom bahasa dengan penutup.
Jelas, Anda dapat menulis ini sebagai generator, seperti:
Tapi sementara ini adalah python idiomatis, tampaknya versi pertama akan sedikit lebih jelas bagi pemula. Menggunakan generator dengan benar, dengan memanggil fungsi yang dikembalikan, adalah titik kebingungan yang umum. Versi pertama secara eksplisit mengembalikan fungsi.
sumber
nonlocal
pernyataan dengan Python; Jika Anda ingin urutan bilangan asli, idiom python sebenarnyaitertools.count()
@ooboo:
Dibutuhkan satu "paling dekat" ke titik referensi dalam kode sumber. Ini disebut "Lexical Scoping" dan standar untuk> 40 tahun sekarang.
Anggota kelas Python benar-benar ada dalam kamus yang disebut
__dict__
dan tidak akan pernah dijangkau oleh pelingkupan leksikal.Jika Anda tidak menentukan
nonlocal
tetapi melakukannyax = 7
, itu akan membuat variabel lokal baru "x". Jika Anda menentukannonlocal
, itu akan menemukan "terdekat" "x" dan menetapkan itu. Jika Anda menentukannonlocal
dan tidak ada "x", itu akan memberi Anda pesan kesalahan.Kata kunci
global
selalu terasa aneh bagi saya karena dengan senang hati akan mengabaikan semua "x" lainnya kecuali yang terluar. Aneh.sumber
Sumber: Referensi Bahasa Python
sumber
help()
kata kunci (dan sekarang pikiran saya meledak:help()
tanpa argumen menjadi interaktif ).Kutipan dari Python 3 Referensi :
Seperti yang disebutkan dalam referensi, dalam kasus beberapa fungsi bersarang hanya variabel dalam fungsi terlampir terdekat yang dimodifikasi:
Variabel "terdekat" dapat berjarak beberapa tingkat:
Tapi itu tidak bisa menjadi variabel global:
sumber
sumber
Pemahaman pribadi saya tentang pernyataan "nonlokal" (dan permisi karena saya baru mengenal Python dan Pemrograman secara umum) adalah bahwa "nonlokal" adalah cara untuk menggunakan fungsionalitas Global dalam fungsi yang diulang daripada tubuh kode itu sendiri . Pernyataan global antar fungsi jika Anda mau.
sumber
dengan fungsi bagian dalam 'nonlokal' (mis. fungsi bagian dalam bersarang) dapat memperoleh izin baca & ' tulis ' untuk variabel tertentu dari fungsi induk luar . Dan nonlocal hanya dapat digunakan di dalam fungsi dalam misalnya:
sumber