„Python“ programoje „ypatinga“ eilutė vadinama „pavadinta kortele“. Python pradedantiesiems tai dažnai glumina, ypač kada ir kodėl turime jį įdiegti.
Kadangi NamedTuple yra rinkinys, jis gali atlikti visas funkcijas, kurias gali atlikti rinkinys. Vis dėlto tai daugiau nei paprastas Python rinkinys. Kitomis kompiuterių kalbomis, kaip ir C++, ji daug panašesnė į „klasę“. Tai eilutės potipis su nurodytais laukais ir apibrėžtu ilgiu, sukurtas programiškai pagal mūsų specifikacijas. Ši pamoka paaiškins Python NamedTuples ir parodys, kaip juos naudoti, kada ir kodėl turime juos naudoti.
Kas yra Python Tuple?
Manome, kad prieš tęsdami turėtume dar kartą peržiūrėti „Python“ eilutes.
„Python“ rinkinys yra konteineris, kuriame galima saugoti daug reikšmių. Apsvarstykite toliau pateiktą atvejį.
Kodas
numbers = (34, 32, 56, 24, 75, 24)
Kaip matome, jį apibrėžti naudojame skliausteliuose. Indeksai naudojami elementams pasiekti. (Atminkite, kad Python indeksavimas prasideda nuo nulio.)
Kodas
numbers[1]
Išvestis:
32
Skaičių [1] „Python“ eilutė yra atskirta tuo, kad negalime keisti jos elementų, ty eilės elementai yra nekintantys.
Python NamedTuple sintaksė
Pirmiausia turime importuoti NamedTuple iš Python integruoto modulio, vadinamo kolekcijomis, kaip parodyta:
from collections import namedtuple
Toliau pateikiama pagrindinė NamedTuple konstravimo sintaksė:
namedtuple(Name,[Names of Values])
vardas tai pavadinimo, kurį norime suteikti savo NamedTuple, parametras ir
[Vertybių vardai] yra sąrašo, kuriame yra skirtingų reikšmių arba atributų pavadinimai, rezervuota vieta.
Python NamedTuple pavyzdys
Pirmasis žingsnis, kaip minėta anksčiau, yra importuoti NamedTuple.
from collections import namedtuple
Dabar galime naudoti sintaksę iš ankstesnės dalies, kad sukurtume NamedTuple:
Student = namedtuple('Student',['Name','Class','Age','Subject','Marks'])
Šiame pavyzdyje
java int kaip eilutę
Mes pasirenkame iškviesti NamedTuple Studentą ir sąraše paminėti reikšmių pavadinimus „Vardas“, „Klasė“, „Amžius“, „Tema“ ir „Pažymės“. Ir mes sukūrėme savo pirmąjį NamedTuple – Studentą.
Dabar galime sukurti namą Student1 su reikiamomis specifikacijomis naudodami Studentą taip:
do ir while ciklas java
Studnet1 = Student('Itika', 11, 15, 'English', 79)
Reikalingos tik konkrečios reikšmės arba turinys, kurį turi užimti mūsų [Verčių pavadinimai] etiketės arba laukai.
Norėdami įvesti naują mokinį, tarkime, Student2, nukopijuokite jo reikšmes ir įklijuokite jas į naujo kintamojo laukus.
Studnet2 = Student('Arshia', 12, 17, 'Maths', 93)
Pamatysime, kad galime naudoti Studentą kaip planą, kad galėtume įrašyti naujų studentų įrašus, kaip tik norime, ir kiekvieną kartą nereikės iškviesti laukų etikečių.
Kaip gauti NamedTuple reikšmes naudojant taškų žymėjimą
Galime naudoti taško metodą, kad gautume NamedTuple egzempliorių Student1 ir Student2 reikšmes. Toliau pateikiama sintaksė:
.
Šis kodo pavyzdys tai parodo:
Kodas
print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name)
Išvestis:
15 11 'English' 79 'Itika'
Taip pat galime gauti kintamuosius, susijusius su NamedTuple Student2, naudodami Student2.Age, Student2.Class ir pan.
NamedTuple prieigos metodai
Vertes iš NamedTuple galime gauti naudodami indeksus, raktinius žodžius ir funkciją getattr(). NamedTuple lauko reikšmės yra griežtai išdėstytos. Todėl galime naudoti indeksus, kad juos surastume.
Laukų pavadinimus į atributus konvertuoja NamedTuple. Dėl to getattr() gali būti naudojamas duomenims iš to lauko gauti.
Kodas
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'))
Išvestis:
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 konvertavimo procedūros
Įvairios kolekcijos gali būti konvertuojamos į NamedTuple naudojant keletą metodų. Taip pat galime naudoti funkciją _make() norėdami paversti sąrašą, seką ar kitus kartojamus objektus į NamedTuple egzempliorių.
Taip pat galime konvertuoti žodyno duomenų tipo objektą į NamedTuple rinkinį. Šiai transformacijai reikalingas operatyvinis veiksmas **.
Kaip OrderedDict duomenų tipo elementas, NamedTuple gali pateikti elementus su savo raktais. Galime iškviesti funkciją _asdict(), kad konvertuotume ją į OrderedDict.
Kodas
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)
Išvestis:
modifikavimo klavišai
Participant(Name='Itika', Age='21', Country='India') Participant(Name='Arshia', Age='19', Country='Australia') {'Name': 'Itika', 'Age': '21', 'Country': 'India'}
Daugiau „NamedTuple“ operacijų
Galimi ir kiti metodai, pvz., _fields() ir _replace. Galime nustatyti, kuriuos laukus turi NamedTuple, iškviesdami funkciją _fields(). Funkcija _replace() naudojama pakeisti vieną reikšmę kita.
Kodas
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)
Išvestis:
Participant(Name='Itika', Age='21', Country='India') The fields of Participant: ('Name', 'Age', 'Country') Participant(Name='Itika', Age='21', Country='Germany')
Kaip veikia Python NamedTuple?
Pažiūrėkime, ką papildomai galime padaryti naudodami „Python“ „NamedTuple“.
1. NamedTuple Python yra nekintamas.
NamedTuple Python negalima modifikuoti, panašiai kaip įprastos versijos. Negalime pakeisti jo savybių.
Norėdami tai parodyti, pabandysime pakeisti vieną iš pavadinimo „Studentas“ eilės savybių.
Kodas
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) Student1.Class = 11
Išvestis:
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
Kaip matote, jis išmeta „AttributeError“. Dėl to galime daryti išvadą, kad NamedTuple yra nekintamas.
2. Python žodyno kūrimas iš Python NamedTuple
„Python“ programoje „NamedTuple“ yra panašus į žodyną ir galime jį paversti tokiu:
Kodas
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) print ( Student1._asdict() )
Išvestis:
{'Name': 'Arshia', 'Class': 12, 'Age': 17, 'Subject': 'Maths', 'Marks': 93}
Mes naudojame. asdict() metodas tam. Tai taip pat sukuria Python OrderedDict.
3. NamedTuple su numatytosiomis reikšmėmis
Pavadinta kortelių klasė gali būti sukonfigūruota naudojant numatytuosius parametrus taip pat, kaip galime nustatyti pradines atributų reikšmes įprastoje klasėje. Numatytieji nustatymai priskiriami dešiniausiems atributams, nes laukai, turintys numatytąją reikšmę, turėtų būti rodomi po kiekvieno lauko be numatytojo.
Iš naujo apibrėžkime Mokinio klasę naudodami tik 1 numatytąjį įrašą.
Kodas
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1 )
Išvestis:
Student(Name='Arshia', Class=12, Age=17, Subject='Maths', Marks=100)
Numatytasis skaičius 100 bus taikomas ženklams, kuris yra dešiniausias mūsų deklaracijos laukas, jei sukursime NamedTuple tik su viena reikšme.
Ar bus taikoma numatytoji Amžiaus reikšmė, jei aiškiai nurodysime lauką kaip Amžius?
Kodas
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 )
Išvestis:
str.substring Java
TypeError: Student.__new__() missing 3 required positional arguments: 'Name', 'Class', and 'Subject'
Atsakymas yra ne. NamedTuple laukų tvarka yra labai griežta. Net jei ką nors aiškiai deklaruojame, numatytosios vertės turi būti pačios teisingiausios, kad būtų išvengta dviprasmybių ir galimų sunkumų.
Python Namedtuple pranašumai
Žinoma, niekas nenaudos NamedTuple, jei nematys pranašumų. Taigi, štai ką turime:
1. Skirtingai nuo standartinio rinkinio, Python NamedTuple gali gauti kintamuosius pagal jų pavadinimus.
Kodas
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1.Age )
Išvestis:
17
2. Python NamedTuple atmintyje veikia kaip įprastas žodynas, nes jame nėra atskirų egzempliorių žodynų. Dėl to jis taip pat yra greitesnis nei žodynas.
Išvada
Šioje pamokoje sužinojome, kaip NamedTuples leidžia derinti ir kortelių, ir žodynų pranašumus, kaip sukurti NamedTuples ir kaip juos naudoti. Kaip gauti NamedTuples reikšmes naudojant taškų žymėjimą Python, kaip jos veikia
Jei skaitytojas yra susipažinęs su Python OOP, jis pamatys, kad tai yra identiška Python klasių veikimui. Klasė ir jos atributai veikia kaip planas, leidžiantis sukurti daug daugiau objektų ar egzempliorių, kurių kiekvienas turi savo atributų reikšmių rinkinį.
Tačiau norint padidinti mūsų kodo aiškumą, apibrėžti klasę ir pateikti esmines charakteristikas paprastai yra per daug, todėl daug greičiau galima sukurti NamedTuples.