Oktatás * Programozás 2 * Szkriptnyelvek * levelezősök Félévek Linkek * kalendárium |
Py /
20170514cnamedtuple A namedtuple a tuple osztály leszármazottja, s abban tér el a sima tuple-től, hogy itt a mezőkhöz nevet tudunk rendelni. Egy namedtuple szintén immutable, azaz létrehozása után nem módosítható. Ha egy tuple-t rekordként kezelünk, aminek több mezője is van, akkor jó ötlet lehet a namedtuple használata. Ha egy olyan saját osztályt definiálunk, amiben csak adatokat tárolunk, azaz csak példányváltozói vannak, akkor azt valószínűleg ki tudjuk váltani egy namedtuple-lel. Egy tuple esetén a mezőkre csakis az indexek segítségével tudunk hivatkozni. Sok mező esetében ez már nyűgös lehet. Egy namedtuple esetén egy mezőre hivatkozhatunk a 1) nevével, vagy 2) az indexével (csakúgy, mint a sima tuple esetén). Egy namedtuple nem foglal több memóriát! Használjuk bátran! Példa Egy játékról a következőkat szeretnénk tárolni: cím, értékelés (százalékban), ill. ár (USD-ben). #!/usr/bin/env python3 from collections import namedtuple Game = namedtuple('Game', ['title', 'rating', 'price']) # It's a class, not an instance! def main(): games = [] g1 = Game('Alan Wake', 91, 2.99) g2 = Game(title='Furi', price=11.99, rating=92) g3 = Game('DOOM', rating=92, price=19.79) games.append(g1) games.append(g2) games.append(g3) print(games) print("-" * 20) print(sorted(games, key=lambda g: g.title)) main() Kimenet: [Game(title='Alan Wake', rating=91, price=2.99), Game(title='Furi', rating=92, price=11.99), Game(title='DOOM', rating=92, price=19.79)] -------------------- [Game(title='Alan Wake', rating=91, price=2.99), Game(title='DOOM', rating=92, price=19.79), Game(title='Furi', rating=92, price=11.99)] Speciális metódusok def main(): g = Game('DOOM', rating=92, price=19.79) print(g._asdict()) # returns an OrderedDict print(dict(g._asdict())) # normal dict print("-" * 20) print(g) print(id(g)) print("-" * 20) g = g._replace(title='doom') # returns a new namedtuple instance print(g) print(id(g)) Ha egy metódus neve '_' jellel kezdődik, az általában privát metódust jelöl. Itt a fenti két metódus neve azért kezdődik így, hogy ne ütközzenek a felhasználó által megadott mezőnevekkel. Kimenet: OrderedDict([('title', 'DOOM'), ('rating', 92), ('price', 19.79)]) {'title': 'DOOM', 'rating': 92, 'price': 19.79} -------------------- Game(title='DOOM', rating=92, price=19.79) 140520697049160 -------------------- Game(title='doom', rating=92, price=19.79) 140520697049400 Linkek |
Blogjaim, hobbi projektjeim * The Ubuntu Incident [ edit ] |