Modul Koleksi Python: bernamatuple

pengantar

Karena memiliki tupel dalam namanya, satu hal yang jelas bahwa itu akan menambah kekuatan super🦸‍♀️ ke tupel.

namedtuple adalah tipe khusus dari tuple yang memiliki indeks bernama. Tentu saja, mereka juga memiliki indeks bilangan bulat normal karena mereka adalah tupel.

Mengimpor NameTuple

 from collections import namedtuple

penciptaan namedtuple

 # Step 1: Define namedtuple # 'typename'=> used when printing an obj & low-lvl stuff # 'fieldnames'=> list of names of indices Student = namedtuple ( typename = 'Student' , field_names = [ 'fname' , 'lname' , 'age' ] ) # Step 2: Create a namedtuple # explicitly assigning named indices s1 = Student ( fname = "Shan" , lname = "Patel" , age = 19 ) # named indices are inferred s2 = Student ( "Kathan" , "Vakharia" , 19 ) print ( s1 , s2 , sep = ' \n ' ) """OUTPUT Student(fname='Shan', lname='Patel', age=19) Student(fname='Kathan', lname='Vakharia', age=19) """

Penting untuk dicatat bahwa pengidentifikasi yang Anda gunakan untuk mendefinisikan namedtuple ( Student di sini) adalah yang harus Anda gunakan saat membuat namedtuple . Ini tidak ada hubungannya dengan typename -Ini hanya nama untuk sub-kelas Tuple kustom Anda.

Mengutip dokumentasi python ,

collections.namedtuple(typename, field_names,...)
– Mengembalikan subclass Tuple baru bernama typename .
Kita dapat melakukan verifikasi silang jika kita ingin menggunakan fungsi issubclass

>>> issubclass(Mahasiswa, tupel)
Benar
# CORRECT WAY s0 = Student ( "heet" , "vakharia" ) print ( s0 ) """OUTPUT blah(fname='heet', lname='vakharia') """"
 # INCORRECT way Student = namedtuple ( typename = "blah" , field_names = [ "fname" , "lname" ] ) s1 = blah ( "kathan" , "vakharia" ) """OUTPUT Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'blah' is not defined """

Mengindeks nama tupel

Pengindeksan objek bernamatuple sangat mudah. Inilah cara Anda melakukannya,

 # way1 : using integer indices # Same like 'plain-tuples' print ( "First element of s1: {}" . format ( s1 [ 0 ])) # way 2: using named indices 'NEW' print ( "Element of s2 having named index lname: {}" . format ( s2 . lname )) """OUTPUT First element of s1: Shan Element of s2 having named index lname: Vakharia """

Karena merupakan sub-kelas dari tuple , ia mewarisi semua metode dan atribut dari tuple .
Namun, ada beberapa metode menarik yang berkaitan dengan namedtuple . Mari kita lihat apa itu,

metode kelas somenamedtuple._make(iterable)

 fields = [ "John" , "Doe" , 34 ] print ( Student . _make ( fields )) """OUTPUT Student(fname='John', lname='Doe', age=34) """

somenamedtuple._asdict()

Mengembalikan dict baru yang memetakan nama bidang ke nilai yang sesuai,

 from collections import namedtuple Student = namedtuple ( typename = 'Student' , field_names = [ 'fname' , 'lname' , 'age' ], ) shan = Student ( fname = "Shan" , lname = "Patel" , age = 19 ) kathan = Student ( "Kathan" , "Vakharia" , 19 ) # namedtuple._asdict() print ( shan . _asdict ()) print ( kathan . _asdict ()) """OUTPUT {'fname': 'Shan', 'lname': 'Patel', 'age': 19} {'fname': 'Kathan', 'lname': 'Vakharia', 'age': 19} """

somenamedtuple._replace(**kwargs)

Mengembalikan instance baru dari tuple bernama menggantikan bidang yang ditentukan dengan nilai baru.

 kathan = Student ( "Kathan" , "Vakharia" , 19 ) # a new tuple will be created with changed fname kathan_v2 = kathan . _replace ( fname = "Karsh" ) print ( kathan_v2 ) # Old kathan is still unchanged print ( kathan ) """OUTPUT Student(fname='Karsh', lname='Vakharia', age=19) Student(fname='Kathan', lname='Vakharia', age=19) """

namedtuple diskusi kita tentang namedtuple . Saya sengaja meninggalkan beberapa fungsi kecil karena terlalu sepele 🙂 Namun, jangan ragu untuk memeriksa dokumentasi untuk sisa 5% itu.

June 19, 2021

codeorayo

Ampuh! Ini rahasia mengembangkan aplikasi secara instan, tinggal download dan kembangkan. Gabung sekarang juga! Premium Membership [PRIVATE] https://premium.codeorayo.com

Leave a Reply

Your email address will not be published. Required fields are marked *