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?

Larutan
my_list = [1,2,3,4,5]
len(my_list)
# 5

Karya-karya yang sama untuk tupel:

my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5

Dan string, yang benar-benar hanya array dari karakter:

my_string = 'hello world'
len(my_string)
# 11

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 memeriksa len() 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.

lengths = map(len, list_of_containers)
Komentar (17)

Cara anda mengambil suhu udara turun menjadi sesuatu yang masuk akal (daftar, kamus, tuple, string, ...) adalah untuk memanggil len di atasnya.

l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5

Alasan "aneh" sintaks adalah bahwa secara internal python menerjemahkan len(objek) menjadi objek.__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 sebagai len pada contoh tersebut.

Komentar (0)

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

Komentar (0)

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.

Komentar (0)

Hanya menggunakan len(arr):

>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
Komentar (0)

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 menggunakan arr.bentuk kembali tinggi dan lebar

Komentar (0)

len(list_name) fungsi mengambil daftar sebagai parameter dan daftar panggilan's __len__() fungsi.

Komentar (0)

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 pelaksanaan len() mengambil jalan pintas. Langsung kembali ob_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.

Komentar (0)