Adalah arr.__len__() cara yang lebih disukai untuk mendapatkan panjang dari array di Python?
Di Python, adalah satu-satunya cara untuk mendapatkan jumlah elemen?
arr.__len__()
Jika demikian, mengapa sintaks aneh?
702
8
Karya-karya yang sama untuk tupel:
Dan string, yang benar-benar hanya array dari karakter:
Itu sengaja melakukan ini way sehingga list, tuple dan wadah lainnya jenis didn't semua perlu secara eksplisit menerapkan publik
.length()
metode, sebagai gantinya anda bisa memeriksalen()
dari apa-apa yang mengimplementasikan 'sihir'__len__()
metode.Tentu, ini mungkin tampak berlebihan, tetapi suhu udara turun memeriksa implementasi dapat bervariasi, bahkan dalam bahasa yang sama. It's tidak jarang untuk melihat salah satu jenis koleksi menggunakan
.length()
metode sementara tipe lain menggunakan.panjang
properti, sementara yang lain menggunakan.count()
. Memiliki bahasa tingkat kata kunci menyatukan entry point untuk semua jenis. Jadi, bahkan benda-benda yang anda tidak dapat mempertimbangkan untuk menjadi daftar dari unsur-unsur yang masih bisa panjang-diperiksa. Ini termasuk string, antrian, pohon, dll.Sifat fungsional dari
len()
juga meminjamkan sendiri baik untuk fungsional gaya pemrograman.Cara anda mengambil suhu udara turun menjadi sesuatu yang masuk akal (daftar, kamus, tuple, string, ...) adalah untuk memanggil
len
di atasnya.Alasan "aneh" sintaks adalah bahwa secara internal python menerjemahkan
len(objek)
menjadiobjek.__len__()
. Hal ini berlaku untuk setiap objek. Jadi, jika anda mendefinisikan beberapa class dan masuk akal untuk itu untuk memiliki suhu udara, hanya mendefinisikan__len__()
metode di atasnya dan kemudian dapat kita sebut sebagailen
pada contoh tersebut.Python menggunakan duck typing: itu doesn't peduli tentang apa yang objek adalah, asalkan memiliki antarmuka yang sesuai untuk situasi di tangan. Ketika anda menelepon built-in fungsi len() pada objek, anda benar-benar memanggil internal __len__ metode. Sebuah objek kustom dapat mengimplementasikan interface ini dan len() akan mengembalikan jawaban, bahkan jika objek tidak secara konseptual urutan.
Untuk daftar lengkap dari antarmuka, silahkan lihat di sini: http://docs.python.org/reference/datamodel.html#basic-customization
Cara yang lebih disukai untuk mendapatkan panjang dari setiap objek python adalah untuk lulus sebagai argumen untuk
len
fungsi. Secara internal, python kemudian akan mencoba untuk memanggil khusus__len__
metode objek yang telah disahkan.Hanya menggunakan
len(arr)
:anda dapat menggunakan
len(arr)
seperti yang disarankan dalam jawaban sebelumnya untuk mendapatkan panjang dari array. Dalam kasus anda inginkan dimensi 2D array anda bisa menggunakanarr.bentuk
kembali tinggi dan lebarlen(list_name)
fungsi mengambil daftar sebagai parameter dan daftar panggilan's__len__()
fungsi.Python menyarankan pengguna menggunakan
len()
bukan__len__()
untuk konsistensi, sama seperti orang lain katakan. Namun, Ada're beberapa manfaat lainnya:Untuk beberapa jenis built-in seperti
daftar
,str
,bytearray
dan sebagainya, Acpi pelaksanaanlen()
mengambil jalan pintas. Langsung kembaliob_size
di C struktur, yang lebih cepat daripada menelepon__len__()
.Jika anda tertarik dengan rincian seperti itu, anda bisa membaca pesan yang disebut "Menguasai Python" oleh Luciano Ramalho. Ada're banyak detail yang menarik di dalamnya, dan dapat membantu anda memahami Python lebih mendalam.