V Pythone sa „špeciálny“ druh n-tice nazýva „pomenovaná n-tice“. Začiatočníci Pythonu sú často zmätení, najmä kedy a prečo ho musíme implementovať.
Keďže NamedTuple je n-tica, môže vykonávať všetky funkcie, ktoré dokáže n-tica. Je to však viac ako jednoduchá pythonovská n-tice. V iných počítačových jazykoch, rovnako ako v C++, je oveľa viac podobná 'triede'. Je to podtyp n-tice so špecifikovanými poľami a definovanou dĺžkou zostavenou programovo podľa našich špecifikácií. Tento tutoriál vysvetlí Python NamedTuples a ukáže, ako ich používať a kedy a prečo ich musíme použiť.
Čo je Python Tuple?
Sme presvedčení, že predtým, ako budeme pokračovať, by sme mali znova navštíviť n-tice v Pythone.
N-tica v Pythone je kontajner, ktorý môže uložiť veľa hodnôt. Zvážte nasledujúci prípad.
kód
numbers = (34, 32, 56, 24, 75, 24)
Ako vidíme, na jeho definovanie používame zátvorky. Indexy sa používajú na prístup k prvkom. (Majte na pamäti, že indexovanie v Pythone začína na nule.)
kód
numbers[1]
Výkon:
32
Číselná n-tica[1] Python je oddelená tým, že nemôžeme modifikovať jej prvky, t.j. prvky n-tice sú nemenné.
Syntax NamedTuple Pythonu
Najprv musíme importovať NamedTuple zo vstavaného modulu Pythonu nazývaného kolekcie, ako je znázornené:
from collections import namedtuple
Nasleduje základná syntax na zostavenie NamedTuple:
namedtuple(Name,[Names of Values])
názov je to parameter pre názov, ktorý chceme dať našej NamedTuple, a
[Názvy hodnôt] je zástupný symbol pre zoznam obsahujúci názvy rôznych hodnôt alebo atribútov.
Príklad Python NamedTuple
Prvým krokom, ako už bolo povedané, je import NamedTuple.
from collections import namedtuple
Teraz môžeme použiť syntax z predchádzajúcej časti na vytvorenie NamedTuple:
Student = namedtuple('Student',['Name','Class','Age','Subject','Marks'])
V tomto príklade
hlavný program v jave
Rozhodli sme sa zavolať NamedTuple Student a uviesť mená hodnôt, 'Meno', 'Trieda', 'Vek', 'Predmet' a 'Marks' v zozname. A vytvorili sme našu prvú NamedTuple - Študent.
Teraz môžeme pomocou Študenta vytvoriť dom Student1 s požadovanými špecifikáciami takto:
filmová herečka kajal
Studnet1 = Student('Itika', 11, 15, 'English', 79)
Vyžadujú sa iba konkrétne hodnoty alebo obsah, ktorý musia obsahovať štítky alebo polia v [Názvy hodnôt].
Ak chcete zadať nového študenta, povedzte Študent2, skopírujte jeho hodnoty a vložte ich do polí novej premennej.
Studnet2 = Student('Arshia', 12, 17, 'Maths', 93)
Uvidíme, že môžeme použiť Študenta ako plán na zaznamenávanie nových študentov tak, ako chceme, bez toho, aby sme zakaždým museli vyvolávať štítky polí.
Ako získať hodnoty NamedTuple pomocou bodkovej notácie
Na získanie hodnôt inštancií NamedTuple Student1 a Student2 môžeme použiť bodkovú metódu. Nasleduje syntax:
.
Nasledujúca ukážka kódu to demonštruje:
kód
print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name)
Výkon:
15 11 'English' 79 'Itika'
Podobne môžeme získať premenné súvisiace s NamedTuple Student2 pomocou Student2.Age, Student2.Class atď.
Metódy prístupu NamedTuple
Hodnoty môžeme získať z NamedTuple pomocou indexov, kľúčových slov a funkcie getattr(). Hodnoty polí NamedTuple sú prísne zoradené. V dôsledku toho môžeme použiť indexy na ich nájdenie.
Názvy polí sú konvertované na atribúty pomocou NamedTuple. Výsledkom je, že getattr() možno použiť na získanie údajov z tohto poľa.
kód
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'))
Výkon:
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
Postupy konverzie NamedTuple
Rôzne kolekcie je možné previesť na NamedTuple pomocou niekoľkých techník. Na transformáciu zoznamu, n-tice alebo iných iterovateľných objektov na inštanciu NamedTuple môžeme použiť aj funkciu _make().
Môžeme tiež skonvertovať objekt typu údajov slovníka na kolekciu NamedTuple. Na túto transformáciu je potrebný pracovník **.
Ako položka typu údajov OrderedDict môže NamedTuple získať položky pomocou svojich kľúčov. Môžeme zavolať funkciu _asdict() a previesť ju na OrderedDict.
kód
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)
Výkon:
Participant(Name='Itika', Age='21', Country='India') Participant(Name='Arshia', Age='19', Country='Australia') {'Name': 'Itika', 'Age': '21', 'Country': 'India'}
Ďalšie operácie na NamedTuple
K dispozícii sú aj iné metódy, ako napríklad _fields() a _replace. Môžeme určiť, ktoré polia má NamedTuple volaním funkcie _fields(). Funkcia _replace() sa používa na výmenu jednej hodnoty za inú.
kód
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)
Výkon:
Participant(Name='Itika', Age='21', Country='India') The fields of Participant: ('Name', 'Age', 'Country') Participant(Name='Itika', Age='21', Country='Germany')
Ako funguje NamedTuple v Pythone?
Pozrime sa, čo navyše môžeme dosiahnuť s NamedTuple v Pythone.
1. NamedTuple v Pythone je Immutable.
NamedTuple v Pythone nemožno upravovať, podobne ako jeho obyčajná verzia. Nie sme schopní zmeniť jeho vlastnosti.
Aby sme to demonštrovali, pokúsime sa upraviť jednu z charakteristík n-tice s menom 'Student'.
kód
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) Student1.Class = 11
Výkon:
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
Ako je vidieť, vyhodí AttributeError. V dôsledku toho môžeme odvodiť, že NamedTuple je nemenný.
2. Vytvorenie slovníka Python z Python NamedTuple
V Pythone je NamedTuple podobný slovníku a môžeme ho transformovať do jedného pomocou:
pytón ťavej
kód
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) print ( Student1._asdict() )
Výkon:
{'Name': 'Arshia', 'Class': 12, 'Age': 17, 'Subject': 'Maths', 'Marks': 93}
Využívame. metóda asdict() na tento účel. To tiež vytvára Python OrderedDict.
3. NamedTuple s predvolenými hodnotami
Pomenovanú triedu n-tice možno nakonfigurovať s predvolenými parametrami rovnakým spôsobom, akým môžeme nastaviť počiatočné hodnoty pre atribúty v bežnej triede. Predvolené hodnoty sú priradené k atribútom úplne vpravo, pretože polia s predvolenou hodnotou by sa mali objaviť po každom poli bez predvolenej hodnoty.
Predefinujme triedu Študent iba s 1 predvolenou položkou.
kód
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1 )
Výkon:
Student(Name='Arshia', Class=12, Age=17, Subject='Maths', Marks=100)
Pre značky sa použije predvolená hodnota 100, čo je pole úplne vpravo v našej deklarácii, ak vytvoríme NamedTuple len s jednou hodnotou.
Použije sa predvolená hodnota pre Vek, ak výslovne špecifikujeme pole ako Vek?
kód
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 )
Výkon:
TypeError: Student.__new__() missing 3 required positional arguments: 'Name', 'Class', and 'Subject'
Odpoveď je nie. V NamedTuple je usporiadanie polí veľmi prísne. Aj keď čokoľvek výslovne deklarujeme, predvolené hodnoty musia byť tie najsprávnejšie, aby sa predišlo nejednoznačnosti a potenciálnym ťažkostiam.
Výhody Pythonu Namedtuple
Samozrejme, nikto nebude používať NamedTuple, ak nevidí žiadne výhody. Takže tu je to, čo máme:
baran herec
1. Na rozdiel od štandardnej n-tice môže NamedTuple v Pythone získavať premenné podľa ich názvov.
kód
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1.Age )
Výkon:
17
2. Pretože neobsahuje slovníky pre jednotlivé inštancie, Python NamedTuple je efektívny v pamäti rovnako ako konvenčná n-tica. Vďaka tomu je tiež rýchlejší ako slovník.
Záver
V tomto návode sme sa naučili, ako nám NamedTuples umožňujú kombinovať výhody n-tic a slovníkov, ako vytvárať NamedTuples a ako ich používať. Ako získať hodnoty NamedTuples pomocou bodkovej notácie v Pythone, ako fungujú
Ak je čitateľ oboznámený s Pythonovým OOP, uvidí, že je totožné s tým, ako fungujú triedy Pythonu. Trieda a jej atribúty fungujú ako plán na vytváranie mnohých ďalších objektov alebo inštancií, z ktorých každý má svoju vlastnú množinu hodnôt atribútov.
Na zvýšenie prehľadnosti nášho kódu je však definovanie triedy a poskytovanie základných charakteristík zvyčajne nadmerné a namiesto toho je oveľa rýchlejšie zostaviť NamedTuples.