Jadual Kandungan
Mengapa menutup perkara
Bagaimana penutupan berfungsi di Python
Kes penggunaan praktikal untuk penutupan
Gotchas dan perkara untuk diperhatikan

Apakah penutupan Python?

Jun 29, 2025 am 01:25 AM

Penutupan adalah objek fungsi dalam python yang dapat mengingati nilai -nilai dalam skop luarnya, walaupun nilai -nilai ini tidak lagi dalam ingatan. Ia adalah fungsi bersarang yang boleh mengakses pembolehubah fungsi luaran, walaupun fungsi luaran telah dilaksanakan. Tiga syarat yang diperlukan untuk penutupan adalah: kewujudan fungsi bersarang, fungsi dalaman merujuk kepada pembolehubah fungsi luaran, dan fungsi luaran mengembalikan fungsi dalaman. Penutupan sering digunakan untuk membuat kilang -kilang fungsi dan mengekalkan negeri -negeri, seperti sistem pembalakan dan kaunter. Apabila menggunakan penutupan, anda perlu ambil perhatian: Mengubah pembolehubah luaran dengan kata kunci nonlocal, pembolehubah adalah rujukan dan bukannya salinan, dan mewujudkan penutupan dalam gelung boleh menyebabkan masalah mengikat berubah -ubah.

Apakah penutupan Python?

Penutupan dalam Python adalah objek fungsi yang mengingati nilai -nilai dalam skop yang melampirkan, walaupun mereka tidak hadir dalam ingatan. Dalam istilah yang lebih mudah, ia adalah fungsi bersarang yang mempunyai akses kepada pembolehubah dari fungsi luarnya (melampirkan), walaupun selepas fungsi luar telah selesai.

Mengapa menutup perkara

Anda mungkin tidak menyedarinya pada mulanya, tetapi menutup lebih kerap daripada yang anda harapkan - terutamanya apabila bekerja dengan penghias atau fungsi panggilan balik. Mereka berguna kerana mereka membiarkan anda mengikat data ke fungsi tanpa lulus secara eksplisit setiap kali. Ini menjadikan kod anda lebih bersih dan kadang -kadang lebih cekap.

Sebagai contoh, bayangkan anda mempunyai fungsi yang menghasilkan fungsi lain. Anda mahu setiap fungsi yang dihasilkan untuk "ingat" beberapa nilai dari konteks penciptaan mereka. Itulah yang ditutup.

Bagaimana penutupan berfungsi di Python

Mari pecahkan ini dengan contoh yang mudah:

 def outer_function (x):
    def inner_function ():
        Cetak (x)
    Kembalikan inner_function

tutup_example = outer_function (10)
tutup_example ()

Dalam kes ini:

  • outer_function mengambil argumen x
  • Ia mentakrifkan inner_function , yang merujuk x tetapi tidak mengambil sebarang hujah
  • Apabila kita memanggil outer_function(10) , ia mengembalikan inner_function (tidak memanggilnya, hanya mengembalikan rujukan)
  • Kemudian kami memanggil closure_example() , dan masih tahu bahawa x adalah 10

Ini berfungsi kerana inner_function yang dikembalikan adalah penutupan - ia membawa nilai x dari skop luar.

Penutup hanya berlaku dalam keadaan tertentu:

  • Mesti ada fungsi bersarang
  • Fungsi dalaman mesti merujuk kepada pembolehubah dari fungsi luar
  • Fungsi luar mesti mengembalikan fungsi dalaman

Kes penggunaan praktikal untuk penutupan

Satu senario biasa di mana penutupan bersinar adalah mewujudkan kilang -kilang fungsi - fungsi yang menghasilkan fungsi lain berdasarkan beberapa konfigurasi.

Fikirkan sistem logger:

 def make_logger (tahap):
    log def (mesej):
        cetak (f "[{level}] {message}")
    Log balik

error_log = make_logger ("ralat")
info_log = make_logger ("info")

Fail error_log ("Fail tidak dijumpai") # [ERROR] tidak dijumpai
info_log ("pengguna log masuk") # [info] pengguna log masuk

Di sini, setiap fungsi log yang dikembalikan mengingati level sendiri. Kami mengelak daripada lulus tahap setiap kali dengan mengikatnya sekali semasa penciptaan.

Satu lagi penggunaan praktikal adalah mengekalkan keadaan tanpa menggunakan kelas. Sebagai contoh, kaunter:

 kaunter def ():
    kiraan = 0
    kenaikan def ():
        kiraan nonlocal
        kiraan = 1
        Kira kembali
    Kenaikan Kembali

counter_a = counter ()
cetak (counter_a ()) # 1
cetak (counter_a ()) # 2

Setiap kaunter mengekalkan keadaan dalamannya sendiri kerana ditutup. Ini boleh menjadi alternatif yang ringan untuk objek penuh dalam beberapa situasi.

Gotchas dan perkara untuk diperhatikan

Apabila bekerja dengan penutupan, simpan perkara ini dalam fikiran:

  • Jika anda mengubah suai pembolehubah dari skop luar di dalam fungsi dalaman, anda perlu menggunakan kata kunci nonlocal . Jika tidak, Python merawatnya sebagai pemboleh ubah tempatan yang baru.
  • Penutupan memegang rujukan kepada pembolehubah, bukan salinan. Jadi jika nilai berubah kemudian di satu tempat, semua penutupan merujuk kepadanya akan melihat nilai yang dikemas kini.
  • Berhati -hati dengan gelung. Kesalahan klasik cuba membuat pelbagai penutupan dalam gelung tanpa mengikat yang betul. Anda mungkin berakhir dengan semua penutupan menggunakan nilai terakhir dari gelung melainkan anda menangkap pembolehubah dengan betul (sering ditetapkan dengan menetapkannya sebagai hujah lalai).

Jika anda melihat tingkah laku yang tidak dijangka, periksa bagaimana dan apabila pembolehubah ditangkap. Kadang -kadang ia membantu mencetaknya tepat di dalam penutupan untuk mengesahkan nilai -nilai yang sebenarnya disimpan.

Pada dasarnya itu sahaja.

Atas ialah kandungan terperinci Apakah penutupan Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Rimworld Odyssey Cara Ikan
1 bulan yang lalu By Jack chen
Apakah had transaksi untuk pengguna asing di Alipay?
1 bulan yang lalu By 下次还敢
Bolehkah saya mempunyai dua akaun Alipay?
1 bulan yang lalu By 下次还敢

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1506
276
Cara Mengendalikan Pengesahan API di Python Cara Mengendalikan Pengesahan API di Python Jul 13, 2025 am 02:22 AM

Kunci untuk menangani pengesahan API adalah untuk memahami dan menggunakan kaedah pengesahan dengan betul. 1. Apikey adalah kaedah pengesahan yang paling mudah, biasanya diletakkan dalam tajuk permintaan atau parameter URL; 2. BasicAuth menggunakan nama pengguna dan kata laluan untuk penghantaran pengekodan Base64, yang sesuai untuk sistem dalaman; 3. OAuth2 perlu mendapatkan token terlebih dahulu melalui client_id dan client_secret, dan kemudian bawa bearertoken dalam header permintaan; 4. Untuk menangani tamat tempoh token, kelas pengurusan token boleh dikemas dan secara automatik menyegarkan token; Singkatnya, memilih kaedah yang sesuai mengikut dokumen dan menyimpan maklumat utama adalah kunci.

Cara Menguji API dengan Python Cara Menguji API dengan Python Jul 12, 2025 am 02:47 AM

Untuk menguji API, anda perlu menggunakan Perpustakaan Permintaan Python. Langkah -langkahnya adalah untuk memasang perpustakaan, menghantar permintaan, mengesahkan respons, menetapkan masa dan cuba semula. Pertama, pasang perpustakaan melalui PipinstallRequests; kemudian gunakan permintaan.get () atau requests.post () dan kaedah lain untuk menghantar permintaan GET atau pos; Kemudian semak respons.status_code dan response.json () untuk memastikan hasil pulangan mematuhi jangkaan; Akhirnya, tambah parameter tamat masa untuk menetapkan masa tamat, dan menggabungkan perpustakaan semula untuk mencapai percubaan automatik untuk meningkatkan kestabilan.

Skop pembolehubah python dalam fungsi Skop pembolehubah python dalam fungsi Jul 12, 2025 am 02:49 AM

Dalam Python, pembolehubah yang ditakrifkan di dalam fungsi adalah pembolehubah tempatan dan hanya sah dalam fungsi; Ditakrifkan secara luaran adalah pembolehubah global yang boleh dibaca di mana sahaja. 1. Pembolehubah tempatan dimusnahkan kerana fungsi dilaksanakan; 2. Fungsi ini boleh mengakses pembolehubah global tetapi tidak dapat diubahsuai secara langsung, jadi kata kunci global diperlukan; 3. Jika anda ingin mengubah suai pembolehubah fungsi luar dalam fungsi bersarang, anda perlu menggunakan kata kunci nonlocal; 4. Pembolehubah dengan nama yang sama tidak mempengaruhi satu sama lain dalam skop yang berbeza; 5. Global mesti diisytiharkan apabila mengubah suai pembolehubah global, jika tidak, kesilapan unboundlocalerror akan dibangkitkan. Memahami peraturan ini membantu mengelakkan pepijat dan menulis lebih banyak fungsi yang boleh dipercayai.

Tutorial Python Fastapi Tutorial Python Fastapi Jul 12, 2025 am 02:42 AM

Untuk mewujudkan API moden dan cekap menggunakan Python, FastAPI disyorkan; Ia berdasarkan kepada jenis python standard yang diminta dan secara automatik dapat menghasilkan dokumen, dengan prestasi yang sangat baik. Selepas memasang FastAPI dan Asgi Server UVicorn, anda boleh menulis kod antara muka. Dengan menentukan laluan, menulis fungsi pemprosesan, dan data yang kembali, API boleh dibina dengan cepat. FastAPI menyokong pelbagai kaedah HTTP dan menyediakan sistem dokumentasi Swaggersui dan Redoc yang dihasilkan secara automatik. Parameter URL boleh ditangkap melalui definisi laluan, manakala parameter pertanyaan boleh dilaksanakan dengan menetapkan nilai lalai untuk parameter fungsi. Penggunaan rasional model Pydantic dapat membantu meningkatkan kecekapan dan ketepatan pembangunan.

Bagaimana cara menghuraikan fail JSON yang besar di Python? Bagaimana cara menghuraikan fail JSON yang besar di Python? Jul 13, 2025 am 01:46 AM

Bagaimana cara mengendalikan fail JSON yang besar di Python? 1. Gunakan Perpustakaan IJSON untuk mengalir dan mengelakkan limpahan memori melalui parsing item demi item; 2. Jika dalam format Jsonlines, anda boleh membacanya dengan garis dan memprosesnya dengan json.loads (); 3. Atau memecah fail besar ke dalam kepingan kecil dan kemudian memprosesnya secara berasingan. Kaedah ini dengan berkesan menyelesaikan masalah batasan memori dan sesuai untuk senario yang berbeza.

Python untuk gelung di atas tuple Python untuk gelung di atas tuple Jul 13, 2025 am 02:55 AM

Di Python, kaedah melintasi tupel dengan gelung termasuk secara langsung melelehkan unsur -unsur, mendapatkan indeks dan elemen pada masa yang sama, dan memproses tuple bersarang. 1. Gunakan gelung untuk terus mengakses setiap elemen dalam urutan tanpa menguruskan indeks; 2. Gunakan penghitungan () untuk mendapatkan indeks dan nilai pada masa yang sama. Indeks lalai adalah 0, dan parameter permulaan juga boleh ditentukan; 3. Di samping itu, tuple tidak berubah dan kandungan tidak dapat diubah suai dalam gelung. Nilai yang tidak diingini boleh diabaikan oleh \ _. Adalah disyorkan untuk memeriksa sama ada tuple kosong sebelum melintasi untuk mengelakkan kesilapan.

Bolehkah kelas Python mempunyai beberapa pembina? Bolehkah kelas Python mempunyai beberapa pembina? Jul 15, 2025 am 02:54 AM

Ya, apythonclasscanhavemulleConstructorsThoughalternetechniques.1.usedefaultargumentsIntheS

Mengakses data dari API Web di Python Mengakses data dari API Web di Python Jul 16, 2025 am 04:52 AM

Kunci untuk menggunakan Python untuk memanggil WebAPI untuk mendapatkan data adalah untuk menguasai proses asas dan alat umum. 1. Menggunakan permintaan untuk memulakan permintaan HTTP adalah cara yang paling langsung. Gunakan kaedah GET untuk mendapatkan respons dan gunakan JSON () untuk menghuraikan data; 2. Bagi API yang memerlukan pengesahan, anda boleh menambah token atau kunci melalui tajuk; 3. Anda perlu menyemak kod status tindak balas, disyorkan untuk menggunakan respons.raise_for_status () untuk mengendalikan pengecualian secara automatik; 4. Menghadapi antara muka paging, anda boleh meminta halaman yang berbeza pada gilirannya dan menambah kelewatan untuk mengelakkan batasan kekerapan; 5. Semasa memproses data JSON yang dikembalikan, anda perlu mengekstrak maklumat mengikut struktur, dan data kompleks dapat ditukar kepada data

See all articles