Dalam Python , apakah ini satu-satunya cara untuk mendapatkan jumlah elemen?
arr.__len__()
Jika demikian, mengapa sintaks anehnya?
Dalam Python , apakah ini satu-satunya cara untuk mendapatkan jumlah elemen?
arr.__len__()
Jika demikian, mengapa sintaks anehnya?
Jawaban:
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
.
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
Alasan untuk sintaks "aneh" adalah bahwa secara internal python diterjemahkan len(object)
menjadi object.__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 memanggil len
instance tersebut.
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
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.
Cukup gunakan len(arr)
:
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
Anda dapat menggunakan len(arr)
seperti yang disarankan dalam jawaban sebelumnya untuk mendapatkan panjang array. Jika Anda menginginkan dimensi array 2D, Anda dapat menggunakan arr.shape
tinggi dan lebar pengembalian
len(list_name)
fungsi mengambil daftar sebagai parameter dan memanggil __len__()
fungsi daftar .
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 dari len()
mengambil jalan pintas. Secara langsung mengembalikan ob_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.