Python'da 'özel' bir tür demet 'adlandırılmış demet' olarak adlandırılır. Python'a yeni başlayanlar, özellikle onu ne zaman ve neden uygulamamız gerektiği konusunda sıklıkla şaşırıyorlar.
NamedTuple bir demet olduğundan, bir demetin yapabileceği tüm işlevleri gerçekleştirebilir. Ancak basit bir Python demetinden daha fazlasıdır. Diğer bilgisayar dillerinde, tıpkı C++'da olduğu gibi, 'sınıf'a çok daha benzer. Belirlenmiş alanlara ve tanımlı bir uzunluğa sahip, programlı olarak bizim spesifikasyonlarımıza göre oluşturulmuş bir demet alt türüdür. Bu eğitimde Python NamedTuples açıklanacak ve bunların nasıl kullanılacağı, ne zaman ve neden kullanılması gerektiği gösterilecektir.
Python Tuple nedir?
Devam etmeden önce Python'daki tuple'ları tekrar ziyaret etmemiz gerektiğine inanıyoruz.
Python'daki bir Tuple, birçok değeri saklayabilen bir kaptır. Aşağıdaki durumu düşünün.
Kod
numbers = (34, 32, 56, 24, 75, 24)
Görüldüğü gibi tanımlamak için parantez kullanıyoruz. Dizinler öğelere erişmek için kullanılır. (Python'da indekslemenin sıfırdan başladığını unutmayın.)
Kod
numbers[1]
Çıktı:
32
Bir sayılar[1] Python demetinin öğelerini değiştiremeyeceğimiz gerçeğiyle ayrılır, yani demetin öğeleri değişmezdir.
Python NamedTuple Söz Dizimi
Önce gösterildiği gibi Python'un koleksiyonlar adı verilen yerleşik modülünden bir NamedTuple'ı içe aktarmalıyız:
from collections import namedtuple
NamedTuple oluşturmak için temel sözdizimi aşağıdadır:
namedtuple(Name,[Names of Values])
İsim NamedTuple'ımıza vermek istediğimiz başlığın parametresidir ve
[Değerlerin Adları] farklı değerlerin veya niteliklerin adlarını içeren liste için yer tutucudur.
Python NamedTuple Örneği
Daha önce de söylediğimiz gibi ilk adım NamedTuple'ı içe aktarmaktır.
from collections import namedtuple
Artık bir NamedTuple oluşturmak için önceki bölümdeki sözdizimini kullanabiliriz:
Student = namedtuple('Student',['Name','Class','Age','Subject','Marks'])
Bu örnekte,
arama motoru ve örnekler
NamedTuple Öğrencisini çağırmayı ve bir listede 'Ad', 'Sınıf', 'Yaş', 'Konu' ve 'İşaretler' değerlerinin adlarını belirtmeyi seçiyoruz. Ve ilk NamedTuple - Öğrencimizi yarattık.
Artık Öğrenci'yi kullanarak aşağıdaki gibi gerekli özelliklere sahip bir Öğrenci1 evi oluşturabiliriz:
10 / 40
Studnet1 = Student('Itika', 11, 15, 'English', 79)
Yalnızca [Değer Adları]'mızdaki etiketlerin veya alanların alması gereken belirli değerler veya içerik gereklidir.
Öğrenci2 gibi yeni bir öğrencinin girişini yapmak için değerlerini kopyalayın ve yeni değişkenin alanlarına yapıştırın.
Studnet2 = Student('Arshia', 12, 17, 'Maths', 93)
Her seferinde alanların etiketlerini çağırmak zorunda kalmadan istediğimiz gibi yeni öğrencilerin kaydını almak için Öğrenci'yi bir plan olarak kullanabileceğimizi göreceğiz.
Nokta Gösterimini Kullanarak NamedTuple'ın Değerleri Nasıl Alınır?
NamedTuple örnekleri Öğrenci1 ve Öğrenci2'nin değerlerini elde etmek için nokta yöntemini kullanabiliriz. Sözdizimi aşağıdadır:
.
Aşağıdaki kod örneği bunu göstermektedir:
Kod
print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name)
Çıktı:
15 11 'English' 79 'Itika'
Benzer şekilde, NamedTuple Öğrenci2 ile ilgili değişkenleri Öğrenci2.Age, Öğrenci2.Class vb. kullanarak alabiliriz.
NamedTuple'a Erişim Yöntemleri
İndeksleri, anahtar sözcükleri ve getattr() işlevini kullanarak NamedTuple'dan değerleri alabiliriz. NamedTuple'ın alan değerleri kesin olarak sıralanmıştır. Sonuç olarak, onları bulmak için endeksleri kullanabiliriz.
Alan adları NamedTuple tarafından niteliklere dönüştürülür. Sonuç olarak, bu alandan veri almak için getattr() kullanılabilir.
Kod
import collections #create employee NamedTuple Participant = collections.namedtuple('Participant', ['Name', 'Age', 'Country']) #Adding two participants p1 = Participant('Itika', '21', 'India') p2 = Participant('Arshia', '19', 'Australia') #Accessing the items using index print( 'The name and country of the first participant are: ' + p1[0] + ' and ' + p1[2]) #Accessing the items using name of the field print( 'The name and country of the second participant are: ' + p2.Name + ' and ' + p2.Country) #Accessing the items using the method: getattr() print( 'The Age of participant 1 and 2 are: ' + getattr(p1, 'Age') + ' and ' + getattr(p2, 'Age'))
Çıktı:
The name and country of the first participant are: Itika and India The name and country of the second participant are: Arshia and Australia The Age of participant 1 and 2 are: 21 and 19
NamedTuple Dönüşüm İşlemleri
Farklı koleksiyonlar birkaç teknik kullanılarak NamedTuple'a dönüştürülebilir. Bir listeyi, tuple'ı veya diğer yinelenebilir nesneleri NamedTuple örneğine dönüştürmek için _make() işlevini de kullanabiliriz.
Ayrıca bir sözlük veri türü nesnesini NamedTuple koleksiyonuna dönüştürebiliriz. Bu dönüşüm için ** operatörü gereklidir.
Bir OrderedDict veri türü öğesi olarak NamedTuple, anahtarlarıyla öğeler üretebilir. Bunu bir OrderedDict'e dönüştürmek için _asdict() işlevini çağırabiliriz.
Kod
import collections #create employee NamedTuple Participant = collections.namedtuple('Participant', ['Name', 'Age', 'Country']) #List to Participants list_ = ['Itika', '21', 'India'] p1 = Participant._make(list_) print(p1) #Dict to convert Employee dict_ = {'Name':'Arshia', 'Age' : '19', 'Country' : 'Australia'} p2 = Participant(**dict_) print(p2) #Displaying the namedtuple as dictionary participant_dict = p1._asdict() print(participant_dict)
Çıktı:
Participant(Name='Itika', Age='21', Country='India') Participant(Name='Arshia', Age='19', Country='Australia') {'Name': 'Itika', 'Age': '21', 'Country': 'India'}
NamedTuple'da Daha Fazla İşlem
_fields() ve _replace gibi başka yöntemler de mevcuttur. _fields() işlevini çağırarak NamedTuple'ın hangi alanlara sahip olduğunu belirleyebiliriz. _replace() işlevi bir değeri başka bir değerle değiştirmek için kullanılır.
Kod
import collections #create employee NamedTuple Participant = collections.namedtuple('Participant', ['Name', 'Age', 'Country']) #List to Participants p1 = Participant('Itika', '21', 'India') print(p1) print('The fields of Participant: ' + str(p1._fields)) #updating the country of participant p1 p1 = p1._replace(Country = 'Germany') print(p1)
Çıktı:
Participant(Name='Itika', Age='21', Country='India') The fields of Participant: ('Name', 'Age', 'Country') Participant(Name='Itika', Age='21', Country='Germany')
Python'un NamedTuple'ı Nasıl Çalışır?
Python'da NamedTuple ile ekstra neler başarabileceğimize bakalım.
1. Python'daki NamedTuple Değişmezdir.
Python'daki bir NamedTuple, sıradan versiyonu gibi değiştirilemez. Özelliklerini değiştiremeyiz.
Bunu göstermek için 'Öğrenci' isimli bir demetin özelliklerinden birini değiştirmeye çalışacağız.
Kod
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) Student1.Class = 11
Çıktı:
AttributeError Traceback (most recent call last) Input In [41], in () 2 Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) 3 Student1 = Student('Arshia', 12, 17, 'Maths', 93) ----> 4 Student1.Class = 11 AttributeError: can't set attribute
Görüldüğü üzere AttributeError hatası veriyor. Sonuç olarak NamedTuple'ın değişmez olduğu sonucunu çıkarabiliriz.
2. Python NamedTuple'dan Python Sözlüğü Oluşturma
Python'da NamedTuple bir sözlüğe benzer ve onu şu şekilde dönüştürebiliriz:
Kod
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) print ( Student1._asdict() )
Çıktı:
{'Name': 'Arshia', 'Class': 12, 'Age': 17, 'Subject': 'Maths', 'Marks': 93}
'dan faydalanıyoruz. Bunun için asdict() yöntemini kullanın. Bu aynı zamanda bir Python OrderedDict üretir.
mysql çalışma tezgahı nasıl kullanılır
3. Varsayılan Değerlerle NamedTuple
Adlandırılmış bir Tuple sınıfı, normal bir sınıftaki öznitelikler için başlangıç değerlerini ayarlayabildiğimiz gibi, varsayılan parametrelerle yapılandırılabilir. Varsayılan değere sahip alanların, varsayılan olmayan her alandan sonra görünmesi gerektiğinden, varsayılanlar en sağdaki niteliklere atanır.
Öğrenci sınıfını yalnızca 1 varsayılan girişle yeniden tanımlayalım.
Kod
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1 )
Çıktı:
Student(Name='Arshia', Class=12, Age=17, Subject='Maths', Marks=100)
NamedTuple'ı tek bir değer ile oluşturduğumuz takdirde deklarasyonumuzda en sağdaki alan olan işaretler için varsayılan rakam olan 100 uygulanacaktır.
Alanın Yaş olacağını açıkça belirtirsek, Yaş için varsayılan değer uygulanacak mı?
Kod
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') Student1 = Student(Age = 18) print ( Student1 )
Çıktı:
TypeError: Student.__new__() missing 3 required positional arguments: 'Name', 'Class', and 'Subject'
Cevap hayır. NamedTuple'da alanların sıralaması çok katıdır. Açıkça bir şey beyan etsek bile, belirsizlik ve olası zorlukları önlemek için varsayılan değerlerin en sağda olması gerekir.
Python Namedtuple'ın Faydaları
Tabii ki hiç kimse herhangi bir avantaj görmediği takdirde NamedTuple'ı kullanmayacaktır. İşte elimizde şunlar var:
1. Standart bir tuple'ın aksine, Python'daki NamedTuple değişkenleri başlıklarına göre alabilir.
Kod
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1.Age )
Çıktı:
17
2. Örnek başına sözlükler içermediğinden Python NamedTuple, geleneksel bir tuple gibi bellek açısından verimlidir. Bu nedenle sözlükten de daha hızlıdır.
Çözüm
Bu eğitimde NamedTuples'ın hem tanımlama grupları hem de sözlüklerin avantajlarını birleştirmemize nasıl olanak tanıdığını, NamedTuples'ın nasıl oluşturulacağını ve bunların nasıl kullanılacağını öğrendik. Python'da nokta gösterimini kullanarak NamedTuples'ın değerleri nasıl alınır, nasıl çalışırlar
Okuyucu Python'un OOP'sine aşinaysa, bunun Python sınıflarının işleyişiyle aynı olduğunu görecektir. Bir sınıf ve onun nitelikleri, her biri kendi nitelik değerleri kümesine sahip olan çok daha fazla nesne veya örnek oluşturmak için bir plan görevi görür.
int'yi c++ dizisine dönüştür
Ancak kodumuzun netliğini artırmak için bir sınıf tanımlamak ve temel özellikleri sağlamak genellikle aşırıdır ve bunun yerine NamedTuples'ı oluşturmak çok daha hızlıdır.