Sebelum saya mulai menulis kode Python, saya menghabiskan sebagian besar waktu saya bekerja dengan PHP. Ada beberapa hal yang membuat PHP menjadi warga negara kelas satu untuk bahasa tersebut. Salah satunya adalah inklusi kelas dinamis, dan yang lainnya adalah kemampuan untuk memanggil fungsi secara dinamis Show
Python di sisi lain tidak membuat keduanya mudah. Ada alasan bagus. Baik kelas pemuatan otomatis maupun fungsi yang dijalankan secara dinamis condong ke sisi magis pemrograman. Kode yang menggunakan pemanggilan fungsi dinamis dapat menjadi sangat cepat membingungkan
Apa itu Panggilan Fungsi Dinamis?Anda mungkin bertanya-tanya apa yang saya maksud dengan "secara dinamis" memanggil suatu fungsi. Mari kita lihat contoh cepat di PHP. Bahkan jika Anda belum pernah melihat PHP, Anda harus dapat memahami apa yang sedang terjadi
Catatan. dalam contoh ini deklarasi tipe bersifat opsional, tetapi merupakan praktik yang baik Dalam contoh ini, fungsi _0. Selama kita mengetahui nama fungsi yang ingin kita panggil, kita dapat mengeksekusi fungsi tersebut dan bahkan memberikan argumenIni adalah ide di balik eksekusi fungsi dinamis. Fungsi yang akan dieksekusi tidak ditentukan saat kode ditulis. Itu ditentukan saat runtime Melakukan ini dengan Python sedikit lebih rumit. Seperti yang kami katakan sebelumnya, itu tidak selalu buruk. Untuk melakukan ini dengan Python, Anda harus mengakses namespace global. Python membuat Anda melakukan ini secara eksplisit di mana PHP tersirat _Dalam contoh ini kami menggunakan fungsi _1 untuk mengakses namespace global. 1 mengembalikan kamus yang menyertakan 0 sebagai kunci dan nilainya adalah referensi ke fungsi area() . Jika Anda tidak terbiasa dengan _1, perubahan sederhana pada kode kami dapat memberi Anda gambaran yang jelas tentang apa yang kami lakukan
Anda dapat melihat bahwa 0 dan 7 menunjuk ke alamat yang sama di memori 8. Ini berarti bahwa dalam pemanggilan lingkup saat ini 9 dan 0 akan menjalankan fungsi yang sama persisJangan Menyalahgunakan GlobalHanya karena Anda dapat melakukan sesuatu bukan berarti Anda harus melakukannya. Menggunakan _1 dengan cara ini sering dianggap tidak pythonic atau aman. Lebih aman menggunakan 2 atau 3 untuk mengakses lingkup lokal saja, tetapi tetap tidak idealUntungnya, objek dalam ruang lingkup dengan cara ini tidak seberbahaya yang seharusnya. Fungsi dan kelas bawaan Python tersedia di kunci 4. Ini sangat penting, karena berarti menelepon 5 akan menaikkan 6. Anda sebenarnya perlu menelepon 7Jujur saja, fungsi dan kelas bawaan Python bukan satu-satunya objek yang dapat dieksploitasi dalam program apa pun Cara yang lebih baik adalah menggunakan kelas untuk mengenkapsulasi metode yang ingin Anda sediakan untuk dieksekusi saat runtime. Anda dapat membuat setiap fungsi sebagai metode kelas. Ketika nama suatu fungsi diberikan, Anda dapat menguji untuk melihat apakah itu adalah atribut kelas dan dapat dipanggil
Jika Anda melihat pernyataan _8 dalam metode 9 dan menjadi sedikit bingung. Jangan khawatir. Saya menggunakan beberapa sintaks yang baru di Python 3. 8Ekspresi penugasan 0 memungkinkan Anda menetapkan nilai variabel dan mengevaluasi hasil ekspresi dalam satu barisFungsinya setara dengan yang berikut ini
Perbedaannya adalah _1 tidak perlu dievaluasi dua kaliMari kita kembali ke contoh kita Metode _9 benar-benar melakukan sebagian besar pekerjaan berat di sini. Ini pertama-tama mengambil _3 dan menambahkan 4 ke depan. Ini seringkali merupakan ide yang bagus. Kelas Anda kemungkinan akan memiliki beberapa metode dan atribut tambahan yang tidak ingin Anda tampilkanSetelah nama fungsi ditentukan, kita dapat memeriksa untuk memastikan bahwa itu adalah atribut yang valid dan fungsi yang dapat kita panggil. Hal terakhir yang kita lakukan hanyalah memanggil fungsi Argumen Fungsi DinamisMeneruskan argumen ke fungsi dinamis sangatlah mudah. Kami hanya dapat membuat _9 menerima 6 dan 7 lalu meneruskannya ke 8
Tentu saja, Anda perlu menangani argumen dalam fungsi yang akan dipanggil. Saat ini, tidak ada metode 9 dalam contoh kami yang menerima argumenSalah satu kerumitan menggunakan argumen dengan eksekusi fungsi dinamis adalah kebutuhan setiap fungsi untuk menangani argumen yang sama. Ini mengharuskan Anda untuk membakukan argumen fungsi Anda Penggunaan Fungsi Dinamis di PythonDua kegunaan umum untuk eksekusi fungsi dinamis di PHP adalah callback dan hook. Namun, dalam Python tidak satu pun dari ini sangat umum Saya pikir fokus Python untuk menjadi eksplisit membuat pengembang tidak bergerak menuju pemrograman meta dan magis. Python juga menyediakan dekorator yang dapat digunakan untuk mengaitkan atau membungkus fungsi secara eksplisit. Kedua hal ini membatasi penggunaan pemanggilan fungsi dinamis Saya pikir contoh terbaik dari eksekusi fungsi dinamis di Python adalah validasi formulir di Django. Katakanlah kita memiliki bentuk seperti ini
Ketika Django memvalidasi dan mem-parsing nilai ke tipe data asli Python, ia akan memanggil fungsi untuk setiap bidang. Fungsinya adalah 0 di mana 1 adalah nama bidangDalam contoh ini kita bisa menambahkan sebuah metode untuk memastikan nilai name valid dan diformat sesuai keinginan kita
Ini adalah contoh yang sangat sederhana. Kami hanya mengambil nilai apa pun yang diberikan di 2 dan menjadikannya huruf kecil. 3 dipanggil dengan metode 4 DjangoMetode _5 dari Django adalah contoh bagus tentang cara menjalankan fungsi secara dinamis
Alasan ________ 24 ________5 ada bukan karena tidak mungkin melakukan ini dengan cara lain. Tetapi karena itu menyediakan antarmuka yang bersih untuk pengembang membangun formulir di Django Saya pikir ini adalah contoh bagus mengapa Anda mungkin ingin menggunakan pola ini. Secara umum, saya akan merekomendasikan untuk menghindarinya, tetapi ada kalanya hal itu membuat perpustakaan atau API mudah digunakan oleh pengembang. Dalam kasus tersebut, jangan menghindar untuk melakukannya, tetapi pastikan Anda melakukannya dengan aman Bagaimana Anda memanggil fungsi dari string dengan Python?Fungsi Python umumnya dipanggil menggunakan namanya. Namun, Anda juga dapat menggunakan string untuk memanggil fungsi. Untuk itu, gunakan locals() dan globals() .
Bagaimana Anda memanggil fungsi dengan argumen di Python?Cara Mendefinisikan dan Memanggil Fungsi Dasar dengan Python . Ketikkan nama fungsi Nama fungsi harus diikuti dengan tanda kurung. Jika ada argumen yang diperlukan, mereka harus diteruskan dalam tanda kurung. Jika fungsi tidak menerima argumen apa pun, Anda masih memerlukan tanda kurung Bagaimana Anda memanggil fungsi dari string?Ada dua metode untuk memanggil fungsi dari string yang disimpan dalam variabel. . Menggunakan metode objek jendela Menggunakan eval() metode Bisakah suatu fungsi mengambil fungsi sebagai argumen Python?Karena fungsi adalah objek, kita dapat meneruskannya sebagai argumen ke fungsi lain . Fungsi yang dapat menerima fungsi lain sebagai argumen juga disebut fungsi tingkat tinggi. |