In Python , elemanların sayısını almak için aşağıdaki tek yol mu?
arr.__len__()
Eğer öyleyse, neden garip sözdizimi?
In Python , elemanların sayısını almak için aşağıdaki tek yol mu?
arr.__len__()
Eğer öyleyse, neden garip sözdizimi?
Yanıtlar:
my_list = [1,2,3,4,5]
len(my_list)
# 5
Aynı tuples için çalışır:
my_tuple = (1,2,3,4,5)
len(my_tuple)
# 5
Ve sadece karakter dizisi olan dizeler:
my_string = 'hello world'
len(my_string)
# 11
Bu şekilde kasıtlı olarak yapıldı , böylece listeler, tuples ve diğer kap türleri veya yinelenebilirlerin herkese açık bir şekilde genel bir .length()
yöntem uygulaması gerekmiyordu , bunun yerine sadece len()
'sihirli' __len__()
yöntemi uygulayan her şeyi kontrol edebilirsiniz .
Elbette, bu gereksiz görünebilir, ancak uzunluk kontrolü uygulamaları aynı dilde bile önemli ölçüde değişebilir. Bir koleksiyon türünün bir .length()
yöntem kullandığını, başka bir tür ise bir .length
özelliği kullandığını, başka bir türün kullanıldığını görmek nadir değildir .count()
. Dil düzeyinde bir anahtar kelimeye sahip olmak, tüm bu türler için giriş noktasını birleştirir. Bu nedenle, öğe listesi olarak düşünemeyeceğiniz nesneler bile yine de uzunluk kontrolünden geçirilebilir. Bu, dizeleri, kuyrukları, ağaçları vb. İçerir.
İşlevsel doğası len()
da işlevsel programlama stillerine iyi bir uyum sağlar.
lengths = map(len, list_of_containers)
Mantıklı olan herhangi bir şeyin uzunluğunu alma şekliniz (liste, sözlük, grup, dize, ...) len
onu çağırmaktır .
l = [1,2,3,4]
s = 'abcde'
len(l) #returns 4
len(s) #returns 5
"Garip" sözdizimi nedeni, içsel piton çevirir olduğunu len(object)
içine object.__len__()
. Bu, herhangi bir nesne için geçerlidir. Yani, bir sınıf tanımlıyorsanız ve bunun bir uzunluğa sahip olması mantıklıysa, sadece bir __len__()
yöntem tanımlayın ve sonra len
bu örnekleri çağırabilirsiniz .
Python kullanan ördek yazarak : bir nesne nedir umursamıyor olduğu sürece el altında durumunuza uygun arayüze sahip olarak. Bir nesnede yerleşik işlev len () öğesini çağırdığınızda, aslında dahili __len__ yöntemini çağırırsınız. Özel bir nesne bu arabirimi uygulayabilir ve nesne kavramsal olarak bir sıra olmasa bile len () yanıtı döndürür.
Arabirimlerin tam listesi için buraya bakın: http://docs.python.org/reference/datamodel.html#basic-customization
Herhangi bir python nesnesinin uzunluğunu almanın tercih edilen yolu, nesneyi len
işleve argüman olarak iletmektir. Dahili olarak, python daha sonra __len__
iletilen nesnenin özel yöntemini çağırmaya çalışır .
Sadece kullanın len(arr)
:
>>> import array
>>> arr = array.array('i')
>>> arr.append('2')
>>> arr.__len__()
1
>>> len(arr)
1
len(arr)
dizinin uzunluğunu öğrenmek için önceki yanıtlarda önerildiği gibi kullanabilirsiniz . 2B dizinin boyutlarını istiyorsanız, arr.shape
yükseklik ve genişlik değerlerini kullanabilirsiniz
len(list_name)
işlevi listeyi parametre olarak alır ve listenin __len__()
işlevini çağırır .
Python, diğer adamların söylediği gibi, kullanıcıların tutarlılık len()
yerine kullanmasını önerir __len__()
. Ancak, başka yararları da vardır:
İçin bazı yerleşik gibi türleri list
, str
, bytearray
ve benzeri, bir Cython uygulamasılen()
bir kısayol alır. Doğrudan çağrıdan ob_size
daha hızlı bir C yapısında döndürür __len__()
.
Bu tür ayrıntılarla ilgileniyorsanız, Luciano Ramalho'nun "Fluent Python" adlı kitabını okuyabilirsiniz. İçinde birçok ilginç detay var ve Python'u daha derinden anlamanıza yardımcı olabilir.