[python] Zkrácená forma přiřazení selže
Přikryl Petr
prikryl na atlas.cz
Úterý Duben 20 14:30:48 CEST 2010
Jirka Vejrazka
> nemam ted momentalne cas to zkouset, ale troufnul bych si odhadnout,
>ze pro funkcnost ve stylu (b) budes muset nadefinovat jak se ma chovat
>iterator, tj. napsat si vlastni metodu __iter__(self, ...)
Je to tak. Jirka to trefil přesně. To násobné přiřazení
vyžaduje, aby objekt podporoval průchod svými prvky.
(Takový objekt se pak dá použít například i v cyklu for.)
Zkus tohle:
class Seznam():
def __init__(self,sez):
self.data=sez
def __getitem__(self,idx):
return idx < len(self.data) and self.data[idx] or None
def __iter__(self):
'''Vraci iterator -- sam sobe iteratorem.'''
self.idx = 0
return self
def next(self):
'''Standardni podpora iterace.'''
if self.idx >= len(self.data):
raise StopIteration
hodnota = Seznam.__getitem__(self, self.idx)
self.idx += 1
return hodnota
### VSTUP: ###
slova = Seznam(["ITEM-1","ITEM-2","ITEM-3","ITEM-4"])
prvni = slova[0]
druhy = slova[1]
treti = slova[2]
ctrty = slova[3]
# Rucne provadena iterace.
it = iter(slova)
print it
print next(it)
print next(it)
print next(it)
print '-' * 50
# Automaticky aktivovana iterace.
prvy, druhy, treti, ctvrty = slova
print prvy
print druhy
print treti
print ctvrty
Další informace o konferenci Python