Apakah penutupan Python?
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.
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 argumenx
- Ia mentakrifkan
inner_function
, yang merujukx
tetapi tidak mengambil sebarang hujah - Apabila kita memanggil
outer_function(10)
, ia mengembalikaninner_function
(tidak memanggilnya, hanya mengembalikan rujukan) - Kemudian kami memanggil
closure_example()
, dan masih tahu bahawax
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

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

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

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.

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.

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.

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 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.

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.

Ya, apythonclasscanhavemulleConstructorsThoughalternetechniques.1.usedefaultargumentsIntheS

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
