Karya Tak Terduga dari Argumen Default Python | Oleh Max | Juni 2022

Programming

[ad_1]
Selamat datang Teman-teman di suratpembaca.web.id. Malam ini kita akan membicarakan tentang Linux yakni Karya Tak Terduga dari Argumen Default Python | Oleh Max | Juni 2022

.

Mudah-mudahan artikel mengenai Karya Tak Terduga dari Argumen Default Python | Oleh Max | Juni 2022

bisa memberikan faedah untuk Sahabat semua. Yuk baca artikel ini
sampai tuntas.

Yang dapat membantu Anda membuat objek baru

Foto oleh Markus Spiske di Unsplash

Argumen default umum dalam kode Python. Mereka adalah salah satu dari banyak fleksibilitas yang ditawarkan Python untuk membuat kode kita lebih bersih dan lebih fleksibel. Namun, jika Anda tidak terbiasa dengan parameter default, mereka dapat memiliki beberapa efek samping yang aneh.

Mari kita lihat performanya berikut ini:

Kedengarannya cukup polos, bukan?

Tetapi jika kita benar-benar menerapkan ini, output kita adalah:

Meskipun ini hanya contoh mainan, kita dapat dengan mudah mengkategorikan potongan kode potensial dalam proses seperti:

Seseorang dapat mengharapkan daftar core_users Berdasarkan masukan user_batch Yang kami tawarkan.

Namun, Anda benar-benar akan menemukan daftar itu core_users Itu tidak diatur ulang di setiap kategori, tetapi sebenarnya dikirimkan.

Jadi apa yang terjadi di sini?

Bertentangan dengan apa yang mungkin Anda pikirkan, argumen default tidak dibuat lagi setiap kali Anda memanggil suatu fungsi, tetapi hanya setelah fungsi tersebut didefinisikan.

Itu sebabnya kami dapat melihat perilaku aneh ini, karena kami core_users Daftar sebenarnya tidak membuat daftar baru setiap kali fungsi dipanggil.

Jadi apa yang bisa kita lakukan?

Nah, salah satu solusi, yang mungkin terpikir oleh sebagian dari Anda segera setelah Anda melihat fungsi di atas, adalah dengan mentransfer definisi kita ke badan fungsi:

Dengan perubahan sederhana ini, kami sekarang mendapatkan perilaku yang diharapkan untuk membuat daftar kami dengan setiap panggilan baru. Dan jika kita membutuhkan fungsi menyediakan daftar awal, kita dapat menyediakannya sebagai input opsional, seperti yang ditunjukkan di bawah ini:

Hal penting yang perlu diperhatikan tentang perilaku ini adalah bahwa ia menimpa argumen default dalam fungsi, serta berlaku untuk variabel kelas.

Mari kita lihat kelas pengguna dasar yang melacak mereka email Dan daftar postingan yang disukai

Jika sekarang kita membuat dua objek dari kelas ini dan mencoba memanipulasi bidang ini, kita akan melihat bahwa bidang email berbeda di antara contoh, tetapi liked_posts Akan dibagikan.

Solusinya di sini mungkin sesuatu yang sudah Anda ketahui, yaitu mengganti atribut kelas dengan atribut instan.

Meskipun masuk akal untuk menggunakan variabel instan saat membuat kelas lengkap dengan metode tambahan, terkadang kita mungkin melupakan prinsip ini saat menggunakannya. attrs.

Dan buat dua contoh terpisah:

Meskipun kita biasanya berakhir dengan mendefinisikan nilai-nilai kita sebagai parameter awal di kelas itu sendiri, jika kita tidak melakukan ini – tetapi mengubahnya nanti – kita masih dihadapkan pada satu variabel umum yang jelas bukan yang kita maksudkan.

Solusinya di sini adalah dengan menggunakan pabrik default yang membuat salinan mendalam dari variabel input, sehingga menciptakan bidang yang sama sekali baru untuk Anda.

Pydantic dan kelas data adalah kumpulan opsi populer lainnya untuk objek data dengan logika parsing serta objek data dasar.

Anda mungkin bertanya-tanya apakah efek yang sama berlaku di sini?

Tidak perlu khawatir tentang Pydantic. Menetapkan Argumen Default Melanjutkan membuat argumen baru dengan setiap instance dari kelas baru yang Anda definisikan.

Di samping itu, dataclasses Jika Anda tidak menggunakan pabrik, itu tidak akan memungkinkan Anda untuk menggunakan bidang yang dapat diubah sebagai nilai default Anda, yang berarti itu akan gagal. Ini juga kodenya:

Dan sebaliknya itu langsung meminta Anda untuk menggunakan pabrik default.

Argumen default dalam Python dapat bekerja dengan cara yang tidak terduga karena hanya dibuat sekali saat objek didefinisikan. Karena perilaku ini, kita harus berhati-hati saat menggunakan argumen argumentable default, baik sebagai variabel kelas maupun dalam metode.

Cara kita dapat menghindari masalah ini adalah dengan menetapkan nilai default di badan metode untuk metode dan menginisialisasi kelas dengan mendefinisikan variabel dalam metode dunder untuk kelas.

Ketika menggunakan attrs Atau dataclassesSebagai gantinya, kita dapat menggunakan pabrik default untuk membuat objek baru untuk setiap instance, alih-alih menggunakan kembali objek sama yang dapat diubah yang dibuat hanya sekali.

Itu tadi pembahasan tentang Karya Tak Terduga dari Argumen Default Python | Oleh Max | Juni 2022

, terimakasih telah mengunjungi website saya, semoga informasinya ada manfaatnya ya.

[ad_2]

Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.