[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