Python'da Namedtuple

Python 'adlı bir tür kapsayıcı sözlüğü destekler' isimlituple() 'modülde mevcut' koleksiyonlar '. Bu yazımızda NameTuple nasıl oluşturulur ve NamedTuple üzerinde işlemlerden bahsedeceğiz.

Python'da NamedTuple nedir?

İçinde Python NamedTuple içinde mevcut koleksiyon modülü . Bir sınıfa benzer, ancak tam bir sınıf tanımlama yükü olmadan basit, hafif veri yapıları oluşturmanın bir yolunu sağlar. Sözlükler gibi, belirli bir değere hashlenmiş anahtarlar içerirler. Aksine, hem anahtar/değerden erişimi hem de işlevsellik yinelemesini destekler. sözlükler eksiklik.

Python NamedTuple Söz Dizimi

isimlituple(tür adı alan_adları)

  • typename - Adlandırılmış grubun adı.
  • field_names - Namedtuple'da saklanan niteliklerin listesi.

Örnek: NamedTuple'ın kod uygulaması şurada gösterilmiştir: Python .

Python
   # Python code to demonstrate namedtuple()   from   collections   import   namedtuple   # Declaring namedtuple()   Student   =   namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # Access using index   print  (  'The Student age using index is : '     end  =  ''  )   print  (  S  [  1  ])   # Access using name   print  (  'The Student name using keyname is : '     end  =  ''  )   print  (  S  .  name  )   

Çıkış
The Student age using index is : 19 The Student name using keyname is : Nandini  

NamedTuple'daki işlemler

Nametuple() kullanılarak yapılabilecek aşağıdaki işlemler aşağıda verilmiştir:

  • NameTuple oluşturun
  • Erişim İşlemleri
  • Dönüşüm İşlemleri
  • Ek İşlemler

Python'da bir NameTuple oluşturun

Bu, nametuple() işlevini kullanarak yeni bir Namedtuple sınıfı oluşturur. koleksiyonlar modülü. İlk argüman yeni sınıfın adı, ikinci argüman ise alan adlarının listesidir.

Python
   from   collections   import   namedtuple   Point   =   namedtuple  (  'Point'     [  'x'     'y'  ])   p   =   Point  (  x  =  1     y  =  2  )   print  (  p  .  x     p  .  y  )   

Çıkış
1 2  

Erişim İşlemleri

Python'daki namedtuples, alanlarına erişmenin kolay yollarını sağlar. NamedTuple için Python'da sağlanan bazı erişim işlemleri aşağıda verilmiştir:

  • Dizine göre erişim
  • Anahtar adına göre erişim
  • getattr() Kullanarak Erişim

Dizine Göre Erişim

Namedtuple()'ın öznitelik değerleri sıralıdır ve indeks tarafından erişilemeyen sözlüklerden farklı olarak indeks numarası kullanılarak erişilebilir. Bu örnekte öğrencinin dosyasına indeks kullanarak erişiyoruz.

Python
   # importing 'collections' for namedtuple()   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # Access using index   print  (  'The Student age using index is : '     end  =  ''  )   print  (  S  [  1  ])   

Çıkış
The Student age using index is : 19  

Anahtar adına göre erişim

Sözlüklerde olduğu gibi anahtar isimle erişime de izin verilmektedir. Bu örnekte öğrencinin adına erişmek için anahtar adı kullanıyoruz.

Python
   # importing 'collections' for namedtuple()   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # Access using name   print  (  'The Student name using keyname is : '     end  =  ''  )   print  (  S  .  name  )   

Çıkış
The Student name using keyname is : Nandini  

getattr() Kullanarak Erişim

Bu, argüman olarak nametuple ve key değerini vererek değere erişmenin başka bir yoludur. Bu örnekte öğrencinin verilen nametuple'daki kimliğine erişmek için getattr() işlevini kullanıyoruz.

Python
   # importing 'collections' for namedtuple()   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # Access using getattr()   print  (  'The Student DOB using getattr() is : '     end  =  ''  )   print  (  getattr  (  S     'DOB'  ))   

Çıkış
The Student DOB using getattr() is : 2541997  

Dönüşüm İşlemleri

Namedtuples, diğer veri türleriyle çalışmak için birkaç yararlı dönüştürme işlemi sağlar. Python . Python'da adlandırılmış dosyalar için sağlanan aşağıdaki dönüştürme işlemleri aşağıda verilmiştir:

  • _make()'ı kullanma
  • _asdict()'ı kullanma
  • ** (çift yıldız) operatörünü kullanma

_make() Kullanarak Dönüştürme

Bu fonksiyon bir değeri döndürmek için kullanılır. yinelenebilirden nametuple() argüman olarak geçti. Bu örnekte 'li' listesini nametuple'a dönüştürmek için _make() kullanıyoruz.

Python
   # importing 'collections' for namedtuple()   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # initializing iterable   li   =   [  'Manjeet'     '19'     '411997'  ]   di   =   {  'name'  :   'Nikhil'     'age'  :   19     'DOB'  :   '1391997'  }   # using _make() to return namedtuple()   print  (  'The namedtuple instance using iterable is : '  )   print  (  Student  .  _make  (  li  ))   

Çıkış
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')  

_asdict() Kullanarak Dönüştürme İşlemi

Bu işlev şunu döndürür: the OrderedDict() nametuple()'ın eşlenen değerlerinden oluşturulduğu gibi. Bu örnekte, girdi listesini adlandırılmış örnek örneğine dönüştürmek için _asdict() işlevini kullanıyoruz.

Python
   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # initializing iterable   li   =   [  'Manjeet'     '19'     '411997'  ]   # initializing dict   di   =   {  'name'  :   'Nikhil'     'age'  :   19     'DOB'  :   '1391997'  }   # using _asdict() to return an OrderedDict()   print  (  'The OrderedDict instance using namedtuple is : '  )   print  (  S  .  _asdict  ())   

Çıkış
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')])  

'**' (çift yıldız) operatörünü kullanma

Bu işlev, bir sözlüğü nametuple() işlevine dönüştürmek için kullanılır. Bu örnekte giriş listesini nametuple'a dönüştürmek için '**' kullanıyoruz.

Python
   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # initializing iterable   li   =   [  'Manjeet'     '19'     '411997'  ]   # initializing dict   di   =   {  'name'  :   'Nikhil'     'age'  :   19     'DOB'  :   '1391997'  }   # using ** operator to return namedtuple from dictionary   print  (  'The namedtuple instance from dict is : '  )   print  (  Student  (  **  di  ))   

Çıkış
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')  

Ek İşlemler 

Sağlanan bazı ek işlemler vardır. Python NamedTuples için:

  • _fields
  • _yer değiştirmek()
  • __yeni__()
  • __getnewargs__()

_fields

Bu veri özelliği şunu elde etmek için kullanılır: tüm önemli isimler bildirilen ad alanı. Bu örnekte, bildirilen ad alanının tüm anahtar adlarını almak için _fields'ı kullanıyoruz.

Python
   import   collections   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # using _fields to display all the keynames of namedtuple()   print  (  'All the fields of students are : '  )   print  (  S  .  _fields  )   

Çıkış
All the fields of students are : ('name' 'age' 'DOB')  

_yer değiştirmek()

_replace(), str.replace() gibidir ancak adlandırılmış alanları hedefler (orijinal değerleri değiştirmez). Bu örnekte bir adı 'Nandini' yerine 'Manjeet' olarak değiştirmek için _replace() işlevini kullanıyoruz.

Python
   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # ._replace returns a new namedtuple    # it does not modify the original   print  (  'returns a new namedtuple : '  )   print  (  S  .  _replace  (  name  =  'Manjeet'  ))   

Çıkış
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')  

__yeni__()

Bu fonksiyon, isimli tupledaki tuşlara atamak istediğimiz değerleri alarak, Öğrenci sınıfının yeni bir örneğini döndürür. Bu örnekte, Öğrenci sınıfının yeni bir örneğini döndürmek için __new__() işlevini kullanıyoruz.

Python
   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   # Student.__new__ returns a new instance of Student(nameageDOB)   print  (  Student  .  __new__  (  Student    'Himesh'    '19'    '26082003'  ))   

Çıkış
Student(name='Himesh' age='19' DOB='26082003')  

__getnewargs__()

Bu işlev, adlandırılmış demet'i düz bir demet olarak döndürür. Bu örnekte __getnewargs__() kullanarak aynısını yapıyoruz.

Python
   import   collections   # Declaring namedtuple()   Student   =   collections  .  namedtuple  (  'Student'     [  'name'     'age'     'DOB'  ])   # Adding values   S   =   Student  (  'Nandini'     '19'     '2541997'  )   H  =  Student  (  'Himesh'    '19'    '26082003'  )   # .__getnewargs__ returns the named tuple as a plain tuple   print  (  H  .  __getnewargs__  ())   

Çıkış
('Himesh' '19' '26082003')  
  1. Değişkenlik : Bir sınıfın örnekleri değiştirilebilir veya değişmez olabilir namedtuple örnekler değişmez.
  2. Yöntemler : Sınıflar yöntemler (işlevler) içerebilirken namedtuple öncelikle verileri adlandırılmış alanlarla depolamanın bir yolunu sağlar.
  3. Miras : Sınıflar, karmaşık hiyerarşilerin oluşturulmasına olanak tanıyan kalıtımı desteklerken namedtuple mirası desteklemez.

Typed dict ile nametuple arasındaki fark nedir?

  1. Tip Kontrolü : TypedDict (dan typing modülü), tür denetimi için yararlı olan belirli anahtar/değer çiftlerine sahip sözlükler için tür ipuçları sağlar. namedtuple tür ipuçları sağlamaz.
  2. Değişkenlik : TypedDict örnekler değiştirilebilir olup değerlerde değişiklik yapılmasına izin verir namedtuple örnekler değişmez.
  3. Yapı : TypedDict sözlüklerin yapısını her anahtar için belirli türlerle tanımlamak için kullanılırken namedtuple Tuple benzeri veriler için adlandırılmış alanlar sağlar.