У Питхон-у, 'посебна' врста торке се зове 'намед тупле'. Почетници у Питхон-у су често збуњени због тога, посебно када и зашто га морамо имплементирати.
Пошто је НамедТупле торка, може да обавља све функције које може да изврши торка. То је, међутим, више од једноставног Питхон-а. У другим рачунарским језицима, баш као и код Ц++, много је сличнији 'класи'. То је подтип тупле са специфицираним пољима и дефинисаном дужином програмски изграђен према нашим спецификацијама. Овај водич ће објаснити Питхон НамедТуплес и показати како их користити и када и зашто их морамо користити.
Шта је Питхон тупле?
Верујемо да би требало да поново погледамо тупле у Питхон-у пре него што наставимо.
Тупле у Питхон-у је контејнер који може да ускладишти многе вредности. Размотрите следећи случај.
Код
numbers = (34, 32, 56, 24, 75, 24)
Као што видимо, користимо заграде да га дефинишемо. Индекси се користе за приступ елементима. (Имајте на уму да индексирање у Питхон-у почиње од нуле.)
Код
numbers[1]
Излаз:
32
Бројеви[1] Питхон тупле је одвојен чињеницом да не можемо да модификујемо његове елементе, тј. елементи тупле су непроменљиви.
Синтакса Питхон НамедТупле
Прво морамо да увеземо НамедТупле из Питхон-овог уграђеног модула који се зове колекције, као што је приказано:
from collections import namedtuple
Следеће је основна синтакса за конструисање НамедТупле:
namedtuple(Name,[Names of Values])
Име то је параметар за наслов који желимо да дамо нашем НамедТупле, и
[Имена вредности] је чувар места за листу која садржи имена различитих вредности или атрибута.
Пример за Питхон НамедТупле
Први корак, као што је раније речено, је увоз НамедТупле.
from collections import namedtuple
Сада можемо да користимо синтаксу из претходног дела да направимо НамедТупле:
Student = namedtuple('Student',['Name','Class','Age','Subject','Marks'])
У овом примеру,
јава слице
Ми бирамо да позовемо НамедТупле Студент и споменемо имена вредности, 'Име', 'Клас', 'Старост', 'Субјецт' и 'Маркс' на листи. И направили смо наш први НамедТупле - Студент.
Сада можемо креирати кућу Студент1 са потребним спецификацијама користећи Студент на следећи начин:
мб вс гб
Studnet1 = Student('Itika', 11, 15, 'English', 79)
Потребне су само одређене вредности или садржај које ознаке или поља у нашим [Називима вредности] морају да имају.
Да бисте унели новог ученика, рецимо Студент2, копирајте његове вредности и налепите их у поља нове променљиве.
Studnet2 = Student('Arshia', 12, 17, 'Maths', 93)
Видећемо да можемо да користимо Студента као нацрт за снимање нових ученика како желимо без потребе да сваки пут прозивамо ознаке поља.
Како добити вредности НамедТупле помоћу нотације тачке
Можемо користити метод тачке да бисмо добили вредности инстанци НамедТупле Студент1 и Студент2. Следеће је синтакса:
.
Следећи пример кода то демонстрира:
Код
print (Student1.Age) print (Student1.Class) print (Student1.Subject) print (Student1.Marks) print (Student1.Name)
Излаз:
15 11 'English' 79 'Itika'
Исто тако, можемо да преузмемо варијабле повезане са НамедТупле Студент2 користећи Студент2.Аге, Студент2.Цласс, итд.
Методе приступа за НамедТупле
Можемо да преузмемо вредности из НамедТупле користећи индексе, кључне речи и функцију гетаттр(). Вредности поља НамедТупле су строго уређене. Као резултат тога, можемо користити индексе да их пронађемо.
Имена поља се конвертују у атрибуте помоћу НамедТупле. Као резултат тога, гетаттр() се може користити за преузимање података из тог поља.
Код
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'))
Излаз:
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
Процедуре конверзије НамедТупле
Различите колекције се могу конвертовати у НамедТупле помоћу неколико техника. Такође можемо користити функцију _маке() да трансформишемо листу, тупле или друге итерабле објекте у НамедТупле инстанцу.
Такође можемо да конвертујемо објекат типа података речника у колекцију НамедТупле. Оператив ** је потребан за ову трансформацију.
Као ставка типа података ОрдередДицт, НамедТупле може дати ставке са својим кључевима. Можемо позвати функцију _асдицт() да бисмо је претворили у ОрдередДицт.
Код
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)
Излаз:
Participant(Name='Itika', Age='21', Country='India') Participant(Name='Arshia', Age='19', Country='Australia') {'Name': 'Itika', 'Age': '21', 'Country': 'India'}
Више операција на НамедТупле
Доступне су и друге методе, као што су _фиелдс() и _реплаце. Можемо одредити која поља има НамедТупле позивањем функције _фиелдс(). Функција _реплаце() се користи за замену једне вредности за другу.
Код
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)
Излаз:
Participant(Name='Itika', Age='21', Country='India') The fields of Participant: ('Name', 'Age', 'Country') Participant(Name='Itika', Age='21', Country='Germany')
Како функционише Питхон-ов НамедТупле?
Хајде да погледамо шта додатно можемо да постигнемо са НамедТупле у Питхон-у.
1. НамедТупле у Питхон-у је непроменљив.
НамедТупле у Питхон-у се не може модификовати, баш као и његова обична верзија. Нисмо у могућности да променимо његове карактеристике.
Покушаћемо да изменимо једну од карактеристика торке са именом 'Студент' да бисмо то показали.
схилпа схетти
Код
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) Student1.Class = 11
Излаз:
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
Као што се може видети, избацује АттрибутеЕррор. Као резултат, можемо закључити да је НамедТупле непроменљив.
2. Креирање Питхон речника из Питхон НамедТупле
У Питхон-у, НамедТупле је сличан речнику и можемо га трансформисати у један на следећи начин:
Код
from collections import namedtuple Student = namedtuple('Student',['Name','Class','Age','Subject','Marks']) Student1 = Student('Arshia', 12, 17, 'Maths', 93) print ( Student1._asdict() )
Излаз:
{'Name': 'Arshia', 'Class': 12, 'Age': 17, 'Subject': 'Maths', 'Marks': 93}
Ми користимо. асдицт() метода за ово. Ово такође производи Питхон ОрдередДицт.
3. НамедТупле са подразумеваним вредностима
Именована класа тупле се може конфигурисати са подразумеваним параметрима на исти начин на који можемо поставити почетне вредности за атрибуте у редовној класи. Подразумеване вредности се додељују крајњим десним атрибутима пошто поља која имају подразумевану вредност треба да се појаве после сваког поља без подразумеване вредности.
Хајде да редефинишемо класу Студент са само 1 подразумеваним уносом.
авс редсхифт
Код
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1 )
Излаз:
Student(Name='Arshia', Class=12, Age=17, Subject='Maths', Marks=100)
Подразумевана бројка 100 биће примењена за ознаке, што је крајње десно поље у нашој декларацији ако креирамо НамедТупле са само једном вредношћу.
Да ли ће се применити подразумевана вредност за старосну доб ако изричито наведемо поље да буде узраст?
Код
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 )
Излаз:
TypeError: Student.__new__() missing 3 required positional arguments: 'Name', 'Class', and 'Subject'
Одговор је не. У НамедТупле-у, редослед поља је веома ригидан. Чак и ако било шта изричито декларишемо, подразумеване вредности морају бити крајње десне да би се спречиле двосмислености и потенцијалне потешкоће.
Предности Питхон-а Намедтупле
Наравно, нико неће користити НамедТупле ако не види никакве предности. Дакле, ево шта имамо:
1. За разлику од стандардног тупле-а, НамедТупле у Питхон-у може да преузме променљиве према њиховим насловима.
Код
from collections import namedtuple Student = namedtuple('Student', ['Name','Class','Age','Subject','Marks'], defaults = [100]) Student1 = Student('Arshia', 12, 17, 'Maths') print ( Student1.Age )
Излаз:
17
2. Пошто не укључује речнике по инстанци, Питхон НамедТупле је ефикасан у меморији баш као и конвенционални тупле. Због тога је такође бржи од речника.
Закључак
Научили смо како нам НамедТуплес омогућавају да комбинујемо предности и торки и речника, како да направимо НамедТуплес и како да их користимо у овом водичу. Како да преузмете вредности НамедТуплес користећи нотацију тачака у Питхон-у, како оне раде
Ако је читалац упознат са Питхон-овим ООП-ом, видеће да је то идентично начину на који функционишу Питхон класе. Класа и њени атрибути делују као нацрт за креирање много више објеката или инстанци, сваки са сопственим скупом вредности атрибута.
Међутим, да бисмо повећали јасноћу нашег кода, дефинисање класе и пружање основних карактеристика је обично претерано и много је брже уместо тога конструисати НамедТуплес.