[python] Zkrácená forma přiřazení selže
Petr Messner
petr.messner na gmail.com
Úterý Duben 20 16:18:46 CEST 2010
Ještě mě napadlo, že by se na to dalo jít takto:
class Seznam:
def __init__(self, sez):
self.data = sez
def __getitem__(self, idx):
if isinstance(idx, slice):
return self._slice(idx.start, idx.stop, idx.step)
return self.data[idx] if idx < len(self.data) else None
def _slice(self, start, stop, step):
if step is None:
step = 1
for i in range(start, stop, step):
yield self[i]
slova = Seznam(("item1", "item2"))
a, b, c, d = slova[:4]
assert (a, b, c, d) == ("item1", "item2", None, None) # projde to
PM
2010/4/20 Petr Messner <petr.messner na gmail.com>:
> Problem ale stejne bude v tom, ze kdyz chci
>
> prvy, druhy, treti, ctrty = slova
>
> tak ten iterator musi vratit presne 4 hodnoty a pak vyvolat
> StopIteration. A jak tomu reknes, ze z toho tahas ty 4 hodnoty? Leda
> tak tim, ze tam fakt budou presne 4. To ale neni chovani, ktere
> ocekava tazatel.
>
> viz http://docs.python.org/reference/simple_stmts.html#assignment-statements
> - "If the target list is a comma-separated list of targets: The object
> must be an iterable with the same number of items as there are targets
> in the target list,"
>
> PM
>
Další informace o konferenci Python