Dalam Python , apakah ini satu-satunya cara untuk mendapatkan jumlah elemen?
arr.__len__()
Jika demikian, mengapa sintaks anehnya?
my_list = [1,2,3,4,5]
len(my_list)
# 5
Pekerjaan yang sama untuk tuple:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Dan string, yang sebenarnya hanya array karakter:
my_string = 'hello world'
len(my_string)
# 11
Itu sengaja dilakukan dengan cara ini sehingga daftar, tupel dan jenis wadah lainnya atau iterables tidak semua perlu secara eksplisit menerapkan .length()
metode publik , sebagai gantinya Anda hanya dapat memeriksa len()
apa pun yang menerapkan metode 'ajaib' __len__()
.
Tentu, ini mungkin tampak berlebihan, tetapi implementasi pengecekan panjang dapat sangat bervariasi, bahkan dalam bahasa yang sama. Ini tidak biasa untuk melihat satu tipe koleksi menggunakan .length()
metode sementara tipe lain menggunakan .length
properti, sementara yang lain menggunakan .count()
. Memiliki kata kunci tingkat bahasa menyatukan titik masuk untuk semua jenis ini. Jadi, bahkan objek yang mungkin tidak Anda pertimbangkan sebagai daftar elemen masih dapat diperiksa panjang. Ini termasuk string, antrian, pohon, dll.
Sifat fungsional len()
juga cocok dengan gaya pemrograman fungsional.
lengths = map(len, list_of_containers)
Cara Anda mengambil banyak hal yang masuk akal (daftar, kamus, tuple, string, ...) adalah memanggilnya
len
.Alasan untuk sintaks "aneh" adalah bahwa secara internal python diterjemahkan
len(object)
menjadiobject.__len__()
. Ini berlaku untuk objek apa pun. Jadi, jika Anda mendefinisikan beberapa kelas dan masuk akal untuk memiliki panjang, cukup tentukan__len__()
metode di atasnya dan kemudian seseorang dapat memanggillen
instance tersebut.sumber
Python menggunakan mengetik bebek : tidak peduli tentang apa obyek yang , asalkan memiliki antarmuka yang sesuai untuk situasi yang dihadapi. Ketika Anda memanggil fungsi built-in len () pada suatu objek, Anda sebenarnya memanggil metode __len__ internalnya. Objek kustom dapat mengimplementasikan antarmuka ini dan len () akan mengembalikan jawabannya, meskipun objek tidak secara konseptual berurutan.
Untuk daftar lengkap antarmuka, silakan lihat di sini: http://docs.python.org/reference/datamodel.html#basic-customization
sumber
Cara yang disukai untuk mendapatkan panjang dari objek python adalah dengan mengirimkannya sebagai argumen ke
len
fungsi. Secara internal, python kemudian akan mencoba memanggil__len__
metode khusus dari objek yang dilewatkan.sumber
Cukup gunakan
len(arr)
:sumber
Anda dapat menggunakan
len(arr)
seperti yang disarankan dalam jawaban sebelumnya untuk mendapatkan panjang array. Jika Anda menginginkan dimensi array 2D, Anda dapat menggunakanarr.shape
tinggi dan lebar pengembaliansumber
len(list_name)
fungsi mengambil daftar sebagai parameter dan memanggil__len__()
fungsi daftar .sumber
Python menyarankan pengguna menggunakan
len()
alih-alih__len__()
untuk konsistensi, seperti yang dikatakan orang lain. Namun, ada beberapa manfaat lain:Untuk beberapa built-in jenis seperti
list
,str
,bytearray
dan sebagainya, pelaksanaan Cython darilen()
mengambil jalan pintas. Secara langsung mengembalikanob_size
dalam struktur C, yang lebih cepat daripada memanggil__len__()
.Jika Anda tertarik pada detail seperti itu, Anda bisa membaca buku yang disebut "Fluent Python" oleh Luciano Ramalho. Ada banyak detail menarik di dalamnya, dan dapat membantu Anda memahami Python lebih dalam.
sumber