Python ondersteunt een type containerwoordenboek genaamd ' benoemddubbel() 'aanwezig in de module' collecties '. In dit artikel gaan we zien hoe u een NameTuple en bewerkingen op NamedTuple maakt.
Wat is NamedTuple in Python?
In Python NamedTuple is aanwezig in het collecties module . Het biedt een manier om eenvoudige lichtgewicht datastructuren te creëren die vergelijkbaar zijn met een klasse, maar zonder de overhead van het definiëren van een volledige klasse. Net als woordenboeken bevatten ze sleutels die zijn gehasht naar een bepaalde waarde. Integendeel, het ondersteunt zowel toegang vanuit sleutelwaarde als iteratie van de functionaliteit die dat biedt woordenboeken gebrek.
Python NamedTuple-syntaxis
benoemdtuple(typenaam veldnamen)
- typename - De naam van de benoemde tweeling.
- field_names - De lijst met attributen die zijn opgeslagen in de benoemde tupel.
Voorbeeld: Code-implementatie van NamedTuple wordt getoond in 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) 
Uitvoer
The Student age using index is : 19 The Student name using keyname is : Nandini
Bewerkingen op NamedTuple
Hieronder staan de volgende bewerkingen die kunnen worden uitgevoerd met nametuple():
- Maak een NaamTupel
- Toegang tot bewerkingen
- Conversiebewerkingen
- Aanvullende bewerkingen
Maak een NameTuple in Python
Hiermee wordt een nieuwe benoemdtuple-klasse gemaakt met behulp van de naamtuple()-functie uit de collecties module. Het eerste argument is de naam van de nieuwe klasse en het tweede argument is een lijst met veldnamen.
Pythonfrom collections import namedtuple Point = namedtuple('Point' ['x' 'y']) p = Point(x=1 y=2) print(p.x p.y) 
Uitvoer
1 2
Toegang tot bewerkingen
Namedtuples in Python bieden handige manieren om toegang te krijgen tot hun velden. Hieronder staan enkele toegangsbewerkingen in Python voor NamedTuple:
sterpatroon afdrukken
- Toegang via index
- Toegang via sleutelnaam
- Toegang via getattr()
Toegang per index
De attribuutwaarden van genaamdtuple() zijn geordend en zijn toegankelijk via het indexnummer, in tegenstelling tot woordenboeken die niet toegankelijk zijn via de index. In dit voorbeeld benaderen we de gegevens van de leerling met behulp van index.
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]) 
Uitvoer
The Student age using index is : 19
Toegang via sleutelnaam
Toegang via sleutelnaam is ook toegestaan, net als in woordenboeken. In dit voorbeeld gebruiken we sleutelnaam om toegang te krijgen tot de naam van de leerling.
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) 
Uitvoer
The Student name using keyname is : Nandini
Toegang via getattr()
Dit is nog een andere manier om toegang te krijgen tot de waarde, door het argumentnamedtuple en de sleutelwaarde op te geven. In dit voorbeeld gebruiken we getattr() om toegang te krijgen tot de ID van de leerling in de opgegeven benoemde tupel.
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')) 
Uitvoer
The Student DOB using getattr() is : 2541997
Conversiebewerkingen
Namedtuples bieden een aantal nuttige conversiebewerkingen om met andere gegevenstypen te werken Python . Hieronder staan de volgende conversiebewerkingen die beschikbaar zijn voor benoemde tupels in Python:
- _make() gebruiken
- _asdict() gebruiken
- Gebruik de operator ** (dubbele ster).
Conversie met _make()
Deze functie wordt gebruikt om a terug te geven nametuple() uit de iterabele als argument doorgegeven. In dit voorbeeld gebruiken we _make() om de lijst 'li' om te zetten in benoemdtuple.
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)) 
Uitvoer
The namedtuple instance using iterable is : Student(name='Manjeet' age='19' DOB='411997')
Conversiebewerking met _asdict()
Deze functie retourneert de BesteldDict() zoals opgebouwd uit de toegewezen waarden van benoemdtuple(). In dit voorbeeld gebruiken we _asdict() om de invoerlijst te converteren naar een benoemde instantie.
Pythonimport 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()) 
Uitvoer
The OrderedDict instance using namedtuple is : OrderedDict([('name' 'Nandini') ('age' '19') ('DOB' '2541997')]) Gebruik de operator '**' (dubbele ster).
Deze functie wordt gebruikt om een woordenboek te converteren naar de naamtuple(). In dit voorbeeld gebruiken we '**' om de invoerlijst om te zetten in benoemdtupel.
Pythonimport 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)) 
Uitvoer
The namedtuple instance from dict is : Student(name='Nikhil' age=19 DOB='1391997')
Aanvullende bewerkingen
Er zijn enkele aanvullende bewerkingen beschikbaar Python voor benoemde tupels:
- _velden
- _vervangen()
- __nieuw__()
- __krijgnieuwewargs__()
_velden
Dit data-attribuut wordt gebruikt om alle sleutelnamen van de aangegeven naamruimte. In dit voorbeeld gebruiken we _fields om alle sleutelnamen van de gedeclareerde naamruimte op te halen.
Pythonimport 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) 
Uitvoer
All the fields of students are : ('name' 'age' 'DOB') _vervangen()
_replace() is als str.replace() maar richt zich op benoemde velden (wijzigt de oorspronkelijke waarden niet). In dit voorbeeld gebruiken we _replace() om een naam te vervangen van 'Nandini' naar 'Manjeet'.
Pythonimport 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')) 
Uitvoer
returns a new namedtuple : Student(name='Manjeet' age='19' DOB='2541997')
__nieuw__()
Deze functie retourneert een nieuw exemplaar van de klasse Student door de waarden te nemen die we willen toewijzen aan de sleutels in de genoemde tupel. In dit voorbeeld gebruiken we __new__() om een nieuw exemplaar van de klasse Student te retourneren.
Pythonimport 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')) 
Uitvoer
Student(name='Himesh' age='19' DOB='26082003')
__krijgnieuwewargs__()
Deze functie retourneert de benoemde tupel als een gewone tupel. In dit voorbeeld doen we hetzelfde door __getnewargs__() te gebruiken.
Pythonimport 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__()) 
Uitvoer
('Himesh' '19' '26082003') 
- Veranderlijkheid : Instanties van een klasse kunnen veranderlijk of onveranderlijk zijn while
namedtupleexemplaren zijn onveranderlijk.- Methoden : Klassen kunnen methoden (functies) while bevatten
namedtuplebiedt voornamelijk een manier om gegevens met benoemde velden op te slaan.- Erfenis : Klassen ondersteunen overerving waardoor complexe hiërarchieën kunnen worden gecreëerd
namedtupleondersteunt geen erfenis.
Wat is het verschil tussen een getypt dictaat en een benoemd dictaat?
- Typecontrole :
TypedDict(van detypingmodule) biedt typehints voor woordenboeken met specifieke sleutel-waardeparen die handig zijn voor typecontrole.namedtuplegeeft geen typehints.- Veranderlijkheid :
TypedDictexemplaren zijn veranderlijk waardoor wijzigingen in de waarden whilenamedtupleexemplaren zijn onveranderlijk.- Structuur :
TypedDictwordt gebruikt om de structuur van woordenboeken te definiëren met specifieke typen voor elke sleutel, terwijlnamedtuplebiedt benoemde velden voor tuple-achtige gegevens.
