Rumah > Artikel > pembangunan bahagian belakang > Mari analisa pengaturcaraan berfungsi Python bersama-sama
Artikel ini membawa anda pengetahuan yang berkaitan tentang python, yang terutamanya memperkenalkan isu yang berkaitan dengan pengaturcaraan berfungsi, iaitu, dalam paradigma imperatif, dengan menyediakan komputer dengan satu siri arahan dan kemudian Laksanakannya untuk menyelesaikannya tugasan ini, semoga dapat membantu semua.
Pembelajaran yang disyorkan: tutorial pembelajaran python
Dalam artikel ini, anda akan mempelajari apakah paradigma berfungsi dan cara menggunakan Python Do pengaturcaraan berfungsi. Anda juga akan belajar tentang pemahaman senarai dan bentuk pemahaman lain.
Dalam paradigma imperatif, tugasan dicapai dengan memberi komputer urutan arahan dan kemudian melaksanakannya. Apabila melaksanakan arahan ini, keadaan tertentu boleh diubah. Sebagai contoh, katakan anda mula-mula menetapkan A kepada 5 dan kemudian menukar nilai A. Pada masa ini, anda menukar keadaan A dalam erti kata nilai dalaman pembolehubah.
Dalam paradigma berfungsi, anda tidak memberitahu komputer apa yang perlu dilakukan tetapi memberitahunya apa itu. Sebagai contoh, apakah pembahagi sepunya terbesar bagi nombor, apakah hasil darab dari 1 hingga n, dsb.
Oleh itu, pembolehubah tidak boleh berubah. Sebaik sahaja anda menetapkan pembolehubah, ia kekal seperti itu selama-lamanya (perhatikan bahawa dalam bahasa berfungsi semata-mata, ia bukan pembolehubah). Oleh itu, pengaturcaraan berfungsi tidak mempunyai kesan sampingan. Kesan sampingan ialah apabila fungsi mengubah sesuatu yang lain daripada dirinya sendiri. Mari lihat beberapa contoh kod Python biasa:
Keluaran kod ini ialah 5. Dalam paradigma fungsian, pembolehubah bermutasi adalah tidak-tidak yang besar, dan mempunyai fungsi yang mempengaruhi perkara di luar skopnya juga tidak boleh tidak. Satu-satunya perkara yang boleh dilakukan oleh fungsi ialah mengira sesuatu dan mengembalikannya sebagai hasilnya.
Kini anda mungkin berfikir: "Tiada pembolehubah, tiada kesan sampingan? Mengapa ini bagus dan saya percaya kebanyakan orang keliru tentang perkara ini?"
Jika fungsi dipanggil dua kali dengan parameter yang sama, ia dijamin akan mengembalikan hasil yang sama. Jika anda telah mempelajari fungsi matematik, anda akan mengetahui faedahnya. Ini dipanggil ketelusan rujukan. Memandangkan fungsi tidak mempunyai kesan sampingan, jika anda membina atur cara yang mengira sesuatu, anda boleh mempercepatkan atur cara. Jika func(2) mengembalikan 3 setiap kali kita memanggilnya, kita boleh menyimpannya dalam jadual, yang menghalang program daripada menjalankan fungsi yang sama berulang kali.
Biasanya, dalam pengaturcaraan berfungsi, kami tidak menggunakan gelung. Kami menggunakan rekursi. Rekursi ialah konsep matematik yang biasanya bermaksud "memanggil dirinya sendiri." Gunakan fungsi rekursif yang memanggil dirinya berulang kali sebagai subfungsi. Berikut ialah contoh baik fungsi rekursif dalam Python:
Sesetengah bahasa pengaturcaraan juga malas. Ini bermakna mereka tidak mengira atau melakukan apa-apa sehingga detik terakhir. Jika anda menulis beberapa kod untuk melakukan 2 2, program fungsi hanya akan mengiranya apabila anda benar-benar perlu menggunakan hasilnya. Kami akan meneroka kemalasan dalam Python tidak lama lagi.
Untuk memahami, mari kita lihat dahulu apa itu lelaran. Biasanya objek yang boleh diulang adalah senarai atau tatasusunan, tetapi Python mempunyai pelbagai jenis yang boleh diulang. Anda juga boleh mencipta objek anda sendiri yang boleh diulangi dengan melaksanakan kaedah sihir. Kaedah ajaib adalah seperti API yang membantu objek anda menjadi lebih Pythonic. Anda perlu melaksanakan 2 kaedah sihir untuk menjadikan objek boleh lelar:
Kaedah sihir pertama "__iter__" (nota: garis bawah dua kali di sini) mengembalikan objek boleh lelar, Ini biasanya digunakan pada permulaan gelung. "__next__" mengembalikan objek seterusnya.
Mari kami memasuki terminal dengan cepat dan memanggil kod di atas:
Menjalankan akan dicetak
Dalam Python, iterator ialah objek dengan hanya __iter__ kaedah sihir. Ini bermakna anda boleh mengakses lokasi dalam objek, tetapi anda tidak boleh melintasi objek tersebut. Sesetengah objek akan mempunyai kaedah ajaib __next__ dan bukannya kaedah ajaib __iter__, seperti koleksi (dibincangkan kemudian dalam artikel ini). Untuk artikel ini, kami akan menganggap bahawa semua yang kami sentuh ialah objek boleh lelaran.
Sekarang kita tahu apa itu objek boleh lelar, mari kembali ke fungsi peta. Fungsi peta membolehkan kami menggunakan fungsi pada setiap item dalam lelaran. Peta memerlukan 2 input, iaitu fungsi yang akan digunakan dan objek boleh lelar.
Andaikan kita mempunyai senarai nombor seperti berikut:
Kami mahu kuasa duakan setiap nombor, kami boleh menulis kod berikut:
Fungsi fungsional dalam Python adalah malas. Jika kita tidak menggunakan "senarai", fungsi itu akan menyimpan takrifan yang boleh diulang dan bukannya senarai itu sendiri. Kita perlu secara jelas memberitahu Python untuk "mengubah ini menjadi senarai" untuk kita gunakan.
Agak pelik apabila tiba-tiba bertukar daripada penilaian tidak malas kepada penilaian malas dalam Python. Jika anda berfikir lebih dalam cara berfikir yang berfungsi dan bukannya cara berfikir yang penting, anda akhirnya akan terbiasa dengannya.
Sekarang menulis fungsi biasa seperti "square(num)" adalah bagus tetapi tidak betul. Adakah kita perlu menentukan fungsi lengkap untuk menggunakannya dalam peta? Nah, kita boleh menentukan fungsi dalam peta menggunakan fungsi lambda (tanpa nama).
Ekspresi lambda ialah fungsi dengan hanya satu baris. Contohnya, ungkapan lambda ini menggandakan nombor yang diberikan:
Mari kita jalankan:
Nampak tak ini seperti fungsi?
Nah, ini agak mengelirukan, tetapi boleh dijelaskan. Kami menetapkan sesuatu kepada pembolehubah "persegi". Bagaimana pula dengan yang ini:
memberitahu Python bahawa ini ialah fungsi lambda dan input dipanggil x. Apa-apa sahaja selepas kolon ialah apa yang anda lakukan dengan input dan ia secara automatik mengembalikan hasilnya.
Untuk memudahkan atur cara segi empat sama kami kepada hanya satu baris kod, kami boleh melakukan ini:
Jadi dalam ungkapan lambda, semua parameter berada pada kiri, anda Bahan yang anda ingin buat dengan mereka ada di sebelah kanan. Agak kelam kabut. Tetapi sebenarnya, terdapat sedikit keseronokan dalam menulis kod yang hanya boleh dibaca oleh pengaturcara berfungsi lain. Selain itu, ia agak menarik untuk mengambil fungsi dan mengubahnya menjadi satu baris kod.
Reduce ialah fungsi yang menukar lelaran menjadi satu perkara. Biasanya, anda menggunakan fungsi pengurangan pada senarai untuk melakukan pengiraan untuk mengurangkannya kepada nombor. Kurangkan kelihatan seperti ini:
Kami sering menggunakan ungkapan lambda sebagai fungsi.
Darab senarai ialah pendaraban setiap nombor individu. Untuk melakukan ini, anda akan menulis kod seperti ini:
Tetapi menggunakan reduce anda boleh menulis seperti ini:
ke dapatkan fungsi yang sama, kod lebih pendek dan lebih bersih menggunakan pengaturcaraan berfungsi. (Nota: Fungsi reduce bukan lagi fungsi terbina dalam Python3 dan perlu diimport daripada modul functools)
Fungsi penapis menggunakan kaedah iterable dan menapis Semua yang anda tidak perlukan dalam iterable itu.
Biasanya, penapis memerlukan fungsi dan senarai. Ia menggunakan fungsi untuk setiap item dalam senarai dan tidak melakukan apa-apa jika fungsi mengembalikan True. Jika Palsu dikembalikan, item itu dialih keluar daripada senarai. Sintaks
adalah seperti berikut:
Mari kita lihat contoh kecil, tanpa penapis kita akan menulis:
Menggunakan penapis, anda boleh menulis seperti ini:
Sebagai bahasa yang sentiasa berkembang dan mempopularkan, Python masih dikemas kini. Semasa belajar, adalah disyorkan untuk mencari beberapa rakan belajar untuk belajar dan berbincang bersama untuk hasil yang lebih baik. Jika anda ingin mempelajari Python, anda dialu-alukan untuk menyertai kumpulan pertukaran pembelajaran Python (627012464) untuk menyelia dan belajar bersama. Ia mengandungi alat pembangunan, banyak maklumat berguna dan maklumat teknikal untuk dikongsi!
Fungsi tertib tinggi boleh mengambil fungsi sebagai parameter dan fungsi pengembalian. Contoh yang sangat mudah adalah seperti berikut:
Contoh kedua mengembalikan fungsi:
Saya berkata pada bermula bahawa bahasa pengaturcaraan Fungsian tulen tidak mempunyai pembolehubah. Fungsi tertib lebih tinggi menjadikannya lebih mudah.
Semua fungsi dalam Python adalah warga kelas pertama. Warganegara kelas pertama ditakrifkan sebagai mempunyai satu atau lebih ciri berikut:
Dicipta pada masa jalan
Diberikan pembolehubah atau elemen dalam struktur data
Lulus sebagai hujah kepada fungsi
Dikembalikan sebagai hasil daripada fungsi
Semua fungsi dalam Python boleh digunakan sebagai fungsi tertib tinggi.
Aplikasi separa (juga dikenali sebagai penutupan) agak pelik, tetapi sangat keren. Anda boleh memanggil fungsi tanpa menyediakan semua parameter yang diperlukan. Mari lihat ini dalam contoh. Kami ingin mencipta fungsi yang mengambil 2 argumen, asas dan eksponen, dan mengembalikan asas yang dinaikkan kepada kuasa eksponen, seperti ini:
Sekarang kami mahu a Fungsi kuasa dua khusus yang mencari kuasa dua nombor menggunakan fungsi kuasa:
Ini berfungsi, tetapi bagaimana jika kita mahukan fungsi kubus? Atau bagaimana pula dengan mencari fungsi kuasa keempat? Bolehkah kita terus menulis tentang mereka? Nah, anda boleh. Tetapi pengaturcara malas. Jika anda mengulangi perkara yang sama berulang kali, itu petanda ada cara yang lebih pantas untuk mempercepatkan perkara yang akan menghalang anda daripada mengulanginya. Kita boleh menggunakan penutupan di sini. Mari lihat contoh fungsi segi empat sama menggunakan penutupan:
Bukankah itu hebat! Kita boleh memanggil fungsi yang memerlukan 2 parameter dengan hanya 1 parameter.
Kami juga boleh menggunakan gelung untuk menjana fungsi kuasa yang melaksanakan kuasa daripada kubus sehingga 1000.
Anda mungkin perasan bahawa terdapat banyak perkara yang ingin kami lakukan dalam pengaturcaraan berfungsi Itu sahaja tentang senarai. Dengan pengecualian mengurangkan fungsi dan penutupan, semua fungsi yang anda lihat menjana senarai. Guido (bapa Python) tidak menyukai ungkapan berfungsi dalam Python kerana Python sudah mempunyai cara tersendiri untuk menjana senarai.
Jika anda menulis "import ini" dalam persekitaran interaktif Python, anda akan mendapat:
Ini ialah Zen Python. Ini adalah puisi tentang apa yang dimaksudkan dengan Pythonic. Bahagian yang ingin kami bincangkan ialah:
Harus ada satu — dan sebaik-baiknya hanya satu — cara yang jelas untuk melakukannya 🎜>
Dalam Python, peta dan penapis boleh melakukan operasi yang sama seperti pemahaman senarai (. dibincangkan di bawah). Ini melanggar salah satu peraturan Zen of Python, jadi bahagian pengaturcaraan berfungsi ini tidak dianggap "pythonic". Topik lain ialah Lambda. Dalam Python, fungsi lambda ialah fungsi biasa. Lambda ialah gula sintaksis. Kedua-dua pernyataan ini adalah setara. Fungsi biasa boleh melakukan semua yang boleh dilakukan oleh fungsi lambda, tetapi ia tidak boleh berfungsi sebaliknya. Fungsi Lambda tidak boleh melakukan semua yang boleh dilakukan oleh fungsi biasa. Ini adalah hujah ringkas mengapa pengaturcaraan berfungsi tidak sesuai dengan keseluruhan ekosistem Python. Anda mungkin perasan bahawa saya telah menyebut pemahaman senarai sebelum ini dan kami akan membincangkannya sekarang.Anda boleh mencipta terbitan untuk sebarang objek boleh lelaran.
Mana-mana objek boleh lelar boleh dijana menggunakan derivasi. Bermula dengan Python 2.7, anda juga boleh menjana kamus (peta hash).
Jika ia boleh diubah, ia boleh dijana. Mari lihat set contoh terakhir.
set ialah senarai elemen di mana tiada unsur diulang dua kali.
Elemen dalam set tidak mempunyai susunan.
Anda mungkin perasan bahawa set mempunyai pendakap kerinting yang sama seperti dict. Python sangat pintar. Bergantung pada sama ada anda memberikan nilai untuk dict, ia akan mengetahui sama ada anda menulis potongan dict atau potongan set.
Pembelajaran yang disyorkan: tutorial python
Atas ialah kandungan terperinci Mari analisa pengaturcaraan berfungsi Python bersama-sama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!