Jenis "seumur hidup variabel" ini dikenal sebagai pelingkupan. Setelah membaca artikel ini, Anda akan mengetahui aturan pelingkupan Python. Ayo mulai Show
Python memiliki 3 cakupan
Anda dapat melihat ketiganya beraksi di sini Ada titik krusial di sini
Untuk alasan ini, kode berikut melontarkan pengecualian def foo(): melempar pengecualian Traceback (most recent call last): Pernyataan “global”. Anda dapat menetapkan nilai ke variabel global dalam suatu fungsi dengan pernyataan global x = "global"def foo(): Saya sangat jarang membutuhkan ini. Untuk memastikan bahwa saya tidak membingungkan apa pun, saya suka menggunakan kamus Traceback (most recent call last): 7. Dalam hal ini, saya lebih suka menggunakanx = "global"def foo(): Pernyataan "nonlokal". Anda dapat menetapkan nilai ke variabel terlampir dengan pernyataan nonlocal x = "global"def foo():_ Contoh yang Membingungkan Gambar oleh wokandapix (sumber)Tambahkan elemen vs '+= [elemen]'xs = []def foo():_ vs xs = []def foo(): Alasan mengapa yang pertama berhasil tetapi tidak yang kedua adalah karena yang pertama memanggil fungsi xs. Itu tidak pernah memberikan nilai ke xs. Yang kedua sama dengan xs = []def foo(): Ketika Python mem-parsing penugasan x = "global"def foo():_1 , x = "global"def foo():2 diberi lingkup lokal. Namun dalam lingkup lokal, x = "global"def foo():_2 tidak ada sebelum x = "global"def foo():4 dijalankan. Oleh karena itu kesalahan Pada contoh pertama dengan x = "global"def foo():_5 , cakupan global x = "global"def foo():2 digunakan. Karenanya kami tidak menghadapi masalah apa pun, karena itu didefinisikan dalam lingkup global Cakupan global TIDAK kembali ke built-in# prints 1 tetapi hal yang sama tidak berfungsi dalam lingkup lokal # UnboundLocalError: local variable 'min' referenced before assignment Alasannya adalah Traceback (most recent call last): _9 dalam lingkup global. Meskipun built-in agak istimewa, mereka hidup dalam lingkup globalPenugasanYang ini membingungkan bagi orang-orang dengan latar belakang Java, C, atau C++. Ini adalah kode Python yang valid Traceback (most recent call last): 0Tetapi di Java Anda harus mendeklarasikannya terlebih dahulu agar dapat menggunakan variabel setelah perulangan Traceback (most recent call last): _1mypymypy adalah pemeriksa tipe yang tersebar luas untuk Python Traceback (most recent call last): _2Jadi mypy tidak suka Anda menetapkan string "foo" ke x = "global"def foo():8 , karena pertama kali membaca mengambil jalur x = "global"def foo():9 dan berasumsi bahwa x = "global"def foo():8 akan menjadi bilangan bulat Maka Anda mungkin ingin melakukan ini Traceback (most recent call last): _3Anda dapat melihat bahwa mypy menganggap x = "global"def foo():8 harus tipe yang sama dalam kedua kasus. Ini masuk akal karena jika tidak, analisis berikut mungkin menjadi sangat rumit Percobaan berikutnya mungkin Traceback (most recent call last): _4Itu seharusnya diharapkan. Menetapkan x = "global"def foo():2 tidak mungkin untuk jenis yang tidak termasuk x = "global"def foo():2 — dan menambahkan x = "global"def foo():2 ke jenis itu dapat menyebabkan lebih banyak masalah di kemudian hari Kamu bisa melakukan ini Traceback (most recent call last): 5Tapi saya juga bisa melihat saat ini terasa aneh. Yang mungkin lebih bersih adalah ini Traceback (most recent call last): _6Ringkasan Kami telah melihat tiga jenis cakupan di Python. Lokal, Terlampir, dan global. Kami telah melihat bahwa Anda dapat mengakses global dengan kata kunci x = "global"def foo():5 atau melalui kamus Traceback (most recent call last): 7. Lokal dapat diakses dengan kamus Traceback (most recent call last): 8 dan variabel terlampir dengan kata kunci x = "global"def foo():8. Ingatlah itu dan pelingkupan Python harus masuk akal 🙂 Apa ruang lingkup akhirnya di Python?Klausa akhirnya dijalankan. Jika ada pengecualian yang disimpan, itu akan dimunculkan kembali di akhir klausa finally . Jika klausa akhirnya memunculkan pengecualian lain atau mengeksekusi pernyataan pengembalian atau istirahat, pengecualian yang disimpan akan hilang.
Bagaimana Anda memeriksa apakah ada sesuatu yang didefinisikan dengan Python?Python tidak memiliki fungsi khusus untuk menguji apakah suatu variabel didefinisikan , karena semua variabel diharapkan telah ditentukan sebelum digunakan, bahkan jika awalnya ditetapkan ke objek Tidak ada.
Bagaimana kita bisa mengatur ruang lingkup variabel dengan Python. jelaskan dengan contoh yang sesuai?Variabel yang didefinisikan di dalam badan fungsi memiliki cakupan lokal, dan variabel yang ditentukan di luar memiliki cakupan global . Ini berarti bahwa variabel lokal hanya dapat diakses di dalam fungsi di mana mereka dideklarasikan, sedangkan variabel global dapat diakses di seluruh badan program oleh semua fungsi.
Bagaimana cara kerja lingkup Python?Konsep ruang lingkup mengatur bagaimana variabel dan nama dicari dalam kode Anda. Ini menentukan visibilitas variabel dalam kode . Cakupan nama atau variabel bergantung pada tempat di kode tempat Anda membuat variabel tersebut. |